|
20 | 20 | <body> |
21 | 21 | <div |
22 | 22 | class="navbar"> |
23 | | - <div |
24 | | - class="container"> |
| 23 | + <div class="container"> |
25 | 24 | <a |
26 | 25 | class="navbar-brand" |
27 | 26 | href="https://sequenceserver.com" target="_blank"> |
|
31 | 30 | </small> |
32 | 31 | </a> |
33 | 32 | <ul class="nav navbar-nav navbar-right hover-reset focus-reset"> |
| 33 | + <li> |
| 34 | + <a |
| 35 | + href="https://sequenceserver.com/progress-on-BLAST-interface/" |
| 36 | + class="update-check" |
| 37 | + data-version="<%= SequenceServer::VERSION %>" |
| 38 | + target="_blank"> |
| 39 | + </a> |
| 40 | + </li> |
34 | 41 | <li> |
35 | 42 | <a |
36 | 43 | target="_blank" |
|
100 | 107 | </div> <!-- /container --> |
101 | 108 | </div> |
102 | 109 |
|
| 110 | + <script> |
| 111 | + document.addEventListener('DOMContentLoaded', function() { |
| 112 | + |
| 113 | + function suggestNewVersion(element, version) { |
| 114 | + element.textContent = `New version v${version} is available`; |
| 115 | + console.log(`New SequenceServer version available ${version}. Please consider updating.`) |
| 116 | + } |
| 117 | + |
| 118 | + const element = document.querySelector('.update-check'); |
| 119 | + const currentVersion = element.getAttribute('data-version'); |
| 120 | + const cachedVersion = document.cookie.split(';').find((item) => item.trim().startsWith('newVersion=')); |
| 121 | + const upToDate = document.cookie.split(';').find((item) => item.trim().startsWith('versionIsLatest=')); |
| 122 | + if (upToDate) { |
| 123 | + console.log('SequenceServer is up to date'); |
| 124 | + return; |
| 125 | + } |
| 126 | + if (cachedVersion) { |
| 127 | + const newVersion = cachedVersion.split('=')[1]; |
| 128 | + if (newVersion !== currentVersion) { |
| 129 | + suggestNewVersion(element, newVersion); |
| 130 | + } |
| 131 | + return; |
| 132 | + } |
| 133 | + console.log('Checking for new SequenceServer version...') |
| 134 | + fetch(`https://updates.sequenceserver.com/?version=${currentVersion}`) |
| 135 | + .then(response => { |
| 136 | + if (response.ok) { |
| 137 | + return response.json(); |
| 138 | + } else { |
| 139 | + console.error('Failed to check for new SequenceServer version') |
| 140 | + } |
| 141 | + }) |
| 142 | + .then(data => { |
| 143 | + const date = new Date(); |
| 144 | + date.setTime(date.getTime() + (24 * 60 * 60 * 1000)); |
| 145 | + const expires = "; expires=" + date.toUTCString(); |
| 146 | + |
| 147 | + if (data.update_available) { |
| 148 | + const newVersion = data.new_version; |
| 149 | + document.cookie = `newVersion=${newVersion}${expires}; path=/`; |
| 150 | + suggestNewVersion(element, newVersion); |
| 151 | + } else { |
| 152 | + console.log('SequenceServer is up to date'); |
| 153 | + document.cookie = `versionIsLatest=true${expires}; path=/`; |
| 154 | + } |
| 155 | + }) |
| 156 | + .catch(() => {}); |
| 157 | + }); |
| 158 | + |
| 159 | + </script> |
103 | 160 | <!-- twitter --> |
104 | 161 | <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script> |
105 | 162 | </body> |
|
0 commit comments