|
9 | 9 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
|
10 | 10 | <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
11 | 11 | <script type="text/javascript">"use strict";
|
12 |
| -var onGet; |
13 |
| -var onPut; |
14 |
| -var setServer; |
| 12 | +let onGet; |
| 13 | +let onPut; |
| 14 | +let setServer; |
15 | 15 | const valueGetElement = function(o) {
|
16 | 16 | const d = window.atob(o.data);
|
17 | 17 | return d;
|
18 | 18 | };
|
19 | 19 | $(function() {
|
20 |
| - var request = undefined; |
21 |
| - var server; |
| 20 | + let request = undefined; |
| 21 | + let server; |
22 | 22 | const getTools = $("#getTools");
|
23 | 23 | const getBtn = $("#getBtn");
|
24 | 24 | const getDropdown = $("#getDropdown");
|
|
46 | 46 | return false;
|
47 | 47 | const input = $("#getKey").val();
|
48 | 48 | group.empty();
|
| 49 | + let lastAppended = 0; |
| 50 | + let start = new Date().getTime(); |
49 | 51 | request = new XMLHttpRequest();
|
50 | 52 | request.onreadystatechange = function(event) {
|
51 | 53 | if (this.readyState >= XMLHttpRequest.LOADING) {
|
52 | 54 | if (this.readyState == XMLHttpRequest.DONE) {
|
53 | 55 | clearGetRequest();
|
54 | 56 | }
|
55 | 57 | if (this.status === 200) {
|
56 |
| - group.empty(); |
57 | 58 | const elements = this.responseText.split("\n");
|
58 |
| - elements.forEach(function(element) { |
| 59 | + const elementsLength = elements.length; |
| 60 | + const now = new Date().getTime(); |
| 61 | + for (let i = lastAppended; i < elementsLength; i++) { |
| 62 | + const element = elements[i]; |
59 | 63 | if (!element || element.length == 0)
|
60 | 64 | return;
|
61 | 65 | const o = JSON.parse(element);
|
62 | 66 | const d = window.atob(o.data);
|
63 |
| - $('<li class="list-group-item"/>').append(valueGetElement(o)).appendTo(group); |
64 |
| - }); |
| 67 | + const delay = Math.max(0, start-now); |
| 68 | + $('<li class="list-group-item"/>').append(valueGetElement(o)).appendTo(group).hide().delay(delay).slideDown(100); |
| 69 | + lastAppended = i+1; |
| 70 | + start = Math.max(start, now)+25; |
| 71 | + } |
65 | 72 | } else if (this.status !== 0) {
|
66 | 73 | group.empty().append($('<li class="list-group-item list-group-item-danger"/>').text("Error loading content: " + this.statusText));
|
67 | 74 | }
|
|
109 | 116 | serverStatus.empty();
|
110 | 117 | serverBtn.button('loading');
|
111 | 118 | $.getJSON(server, function(data){
|
112 |
| - serverStatus.append('<b>Node</b> ').append(data.node_id); |
| 119 | + $('<span><b>Node</b> '+data.node_id+'</span>').appendTo(serverStatus).hide().fadeIn(); |
113 | 120 | }).fail(function(error) {
|
114 | 121 | serverStatus.html("<div class='alert alert-danger' style='margin-bottom: 0px;'><span class='glyphicon glyphicon-remove' aria-hidden='true'></span> Can't access node</div>");
|
115 | 122 | }).always(function(error) {
|
@@ -154,7 +161,6 @@ <h1>OpenDHT tester</h1>
|
154 | 161 | <button id="getBtn" class="btn btn-default" data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i>" type="submit">Get</button>
|
155 | 162 | <button id="getDropdown"type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <span class="caret"></span> <span class="sr-only">Toggle Dropdown</span> </button>
|
156 | 163 | <ul class="dropdown-menu">
|
157 |
| - <li><a id="getDropBtn" href="#">Get</a></li> |
158 | 164 | <li><a id="listenBtn" href="#">Listen</a></li>
|
159 | 165 | </ul>
|
160 | 166 | <button id="getStopBtn" class="btn btn-default" type="submit"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></button>
|
|
0 commit comments