From 8d329b93b246c7a1bc2d2fd7215a8d2b7c55ebf7 Mon Sep 17 00:00:00 2001
From: AJ ONeal 
Date: Fri, 12 Jan 2018 02:46:17 -0700
Subject: [PATCH] WIP explore records
---
 lib/public/index.html |  13 ++++-
 lib/public/js/app.js  | 123 +++++++++++++++++++++++++++++++++++++-----
 2 files changed, 122 insertions(+), 14 deletions(-)
diff --git a/lib/public/index.html b/lib/public/index.html
index 4dd8db9..dcffca6 100644
--- a/lib/public/index.html
+++ b/lib/public/index.html
@@ -21,8 +21,17 @@
       
 
-    
-      - blah+
Peers:
+    
+
+    
+
+    
+      - record-type record-name
diff --git a/lib/public/js/app.js b/lib/public/js/app.js
index 1b95d03..b6b2c0b 100644
--- a/lib/public/js/app.js
+++ b/lib/public/js/app.js
@@ -4,8 +4,8 @@
   if (!Element.prototype.matches) {
     Element.prototype.matches = Element.prototype.msMatchesSelector;
   }
-  function $qs(qs) {
-    return document.querySelector(qs);
+  function $qs(qs, el) {
+    return (el||document).querySelector(qs);
   }
   function $on(selector, eventname, cb) {
     if (!$on._events[eventname]) {
@@ -35,21 +35,13 @@
           return true;
         }
       });
-      if (!matches) {
+      if (matches) {
         console.warn("no handlers for selector");
       }
     };
   };
-  $on('body', 'click', function () {
-    console.log('woo-hoo, that tickles my body!');
-  });
 
-  var auth = localStorage.getItem('auth');
-
-  $qs('input.js-jwt').value = auth || '';
-
-
-  $on('button.js-jwt', 'click', function (/*ev*/) {
+  function verifyAuth(/*ev*/) {
     auth = $qs('input.js-jwt').value;
     return window.fetch(
       '/api/verify-auth'
@@ -59,18 +51,119 @@
     ).then(function (resp) {
       return resp.json().then(function (data) {
         if (data.error) {
+          localStorage.removeItem('auth');
           console.error(data.error);
           window.alert('Bad HTTP Response: ' + data.error.message);
           throw new Error('Bad HTTP Response: ' + data.error.message);
         }
 
+        console.log('verify-auth:');
         console.log(data);
 
         localStorage.setItem('auth', auth);
+
+        return fetchPeers(auth).then(function () {
+          return fetchZones(auth);
+        });
       });
     });
+  }
+  function fetchPeers(auth) {
+    return window.fetch('/api/peers', {
+      method: 'GET'
+    , headers: new window.Headers({ 'Authorization': 'Bearer ' + auth })
+    }).then(function (resp) {
+      return resp.json().then(function (data) {
+        var tpl = '';
+        var el;
+        if (!tpls.peer) {
+          tpls.peer = $qs('.js-peer-tpl').innerHTML;
+        }
+        data.peers.forEach(function (peer) {
+          el = document.createElement('div');
+          el.innerHTML = tpls.peer;
+          console.log(el);
+          console.log($qs('.js-peer-name', el));
+          $qs('.js-peer-name', el).innerText = peer.name;
+          $qs('.js-peer-name', el).dataset.id = peer.name;
+          console.log(el.innerHTML);
+          tpl += el.innerHTML;
+          console.log(tpl);
+        });
+        $qs('.js-peer-tpl').innerHTML = tpl;
+        console.log($qs('.js-peer-tpl').innerHTML);
+      });
+    });
+  }
+  function fetchZones(auth) {
+    return window.fetch('/api/zones', {
+      method: 'GET'
+    , headers: new window.Headers({ 'Authorization': 'Bearer ' + auth })
+    }).then(function (resp) {
+      return resp.json().then(function (data) {
+        var tpl = '';
+        var el;
+        if (!tpls.zone) {
+          tpls.zone = $qs('.js-zone-tpl').innerHTML;
+        }
+        data.zones.forEach(function (zone) {
+          el = document.createElement('div');
+          el.innerHTML = tpls.zone;
+          console.log(el);
+          console.log($qs('.js-zone-name', el));
+          $qs('.js-zone-name', el).innerText = zone.id;
+          $qs('.js-zone-name', el).dataset.id = zone.id;
+          console.log(el.innerHTML);
+          tpl += el.innerHTML;
+          console.log(tpl);
+        });
+        $qs('.js-zone-tpl').innerHTML = tpl;
+        console.log($qs('.js-zone-tpl').innerHTML);
+      });
+    });
+  }
+  function fetchRecords(zone) {
+    return window.fetch('/api/zones/' + zone + '/records', {
+      method: 'GET'
+    , headers: new window.Headers({ 'Authorization': 'Bearer ' + auth })
+    }).then(function (resp) {
+      return resp.json().then(function (data) {
+        var tpl = '';
+        var el;
+        if (!tpls.record) {
+          tpls.record = $qs('.js-record-tpl').innerHTML;
+        }
+        data.records.forEach(function (record) {
+          el = document.createElement('div');
+          el.innerHTML = tpls.record;
+          console.log(el);
+          console.log($qs('.js-record-name', el));
+          $qs('.js-record-type', el).innerText = record.type;
+          $qs('.js-record-name', el).innerText = record.name;
+          console.log(el.innerHTML);
+          tpl += el.innerHTML;
+          console.log(tpl);
+        });
+        $qs('.js-record-tpl').innerHTML = tpl;
+        console.log($qs('.js-record-tpl').innerHTML);
+      });
+    });
+  }
+
+  // BEGIN
+  var tpls = {};
+  var auth = localStorage.getItem('auth');
+  if (auth) {
+    $qs('input.js-jwt').value = auth;
+    verifyAuth();
+  }
+
+  $on('body', 'click', function () {
+    console.log('woo-hoo, that tickles my body!');
   });
 
+  $on('button.js-jwt', 'click', verifyAuth);
+
   $on('input.js-zone', 'keyup', function (ev) {
     $qs('code.js-zone').innerHTML = ev.target.value || ':zone';
     // $qs('a.js-zone').setAttribute('data-href', ...)
@@ -84,4 +177,10 @@
       $qs('a.js-name').dataset.href.replace(/:name/, ev.target.value || ':name');
   });
 
+  $on('button.js-zone-name', 'click', function (ev) {
+    var zone = ev.target.dataset.id;
+    return fetchRecords(zone);/*.then(function () {
+    });*/
+  });
+
 }());