|
5 | 5 | <meta name="viewport" content="width=device-width, initial-scale=1"> |
6 | 6 | <title>{{#if name}}{{name}} – {{/if}}Solid Home</title> |
7 | 7 | <link rel="stylesheet" href="/common/css/bootstrap.min.css"> |
| 8 | + <script id="solid-auth-client" src="/common/js/solid-auth-client.bundle.js" defer></script> |
| 9 | + <style> |
| 10 | + .session-action { |
| 11 | + margin-right: 15px; |
| 12 | + } |
| 13 | + </style> |
8 | 14 | </head> |
9 | 15 | <body> |
10 | 16 | <div class="container"> |
|
13 | 19 | <div class="navbar-header"> |
14 | 20 | <a href="/" class="navbar-brand">{{#if name}}{{name}} – {{/if}}Solid Home</a> |
15 | 21 | </div> |
| 22 | + <div class="navbar-right"> |
| 23 | + <button id="session-action" type="button" class="session-action btn btn-default navbar-btn">Loading...</button> |
| 24 | + </div> |
16 | 25 | </div> |
17 | 26 | </nav> |
18 | 27 | </div> |
@@ -67,4 +76,63 @@ <h1>Apps</h1> |
67 | 76 | </section> |
68 | 77 | </div> |
69 | 78 | </body> |
| 79 | +<script type="text/javascript"> |
| 80 | + const popupUri = window.location.origin + '/common/popup.html' |
| 81 | + const stateData = { |
| 82 | + session: null |
| 83 | + } |
| 84 | + const state = new Proxy(stateData, { |
| 85 | + set: (obj, prop, value) => { |
| 86 | + obj[prop] = value |
| 87 | + render() |
| 88 | + } |
| 89 | + }) |
| 90 | + |
| 91 | + function main() { |
| 92 | + // Render the session state |
| 93 | + SolidAuthClient |
| 94 | + .currentSession() |
| 95 | + .then(saveSession) |
| 96 | + .then(render) |
| 97 | + |
| 98 | + // Add event listeners |
| 99 | + const actionButton = sessionActionButton() |
| 100 | + actionButton.addEventListener('click', takeSessionAction) |
| 101 | + } |
| 102 | + |
| 103 | + function saveSession(session) { |
| 104 | + state.session = session |
| 105 | + return session |
| 106 | + } |
| 107 | + |
| 108 | + function takeSessionAction() { |
| 109 | + const { session } = state |
| 110 | + const loggedIn = !!session |
| 111 | + if (loggedIn) { |
| 112 | + SolidAuthClient |
| 113 | + .logout() |
| 114 | + .then(saveSession) |
| 115 | + } else { |
| 116 | + SolidAuthClient |
| 117 | + .popupLogin({ popupUri }) |
| 118 | + .then(saveSession) |
| 119 | + } |
| 120 | + } |
| 121 | + |
| 122 | + function render() { |
| 123 | + const { session } = state |
| 124 | + const actionButton = sessionActionButton() |
| 125 | + if (!session) { |
| 126 | + actionButton.innerText = 'Log in' |
| 127 | + } else { |
| 128 | + actionButton.innerText = 'Log out' |
| 129 | + } |
| 130 | + } |
| 131 | + |
| 132 | + function sessionActionButton() { |
| 133 | + return document.getElementById('session-action') |
| 134 | + } |
| 135 | + |
| 136 | + main() |
| 137 | +</script> |
70 | 138 | </html> |
0 commit comments