flex/flex-training-flexinale/flexinale-monolith/src/main/resources/static/dragon.js

91 lines
No EOL
2.5 KiB
JavaScript

// Copyright 2016 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
function refresh(action, callback) {
var x = new XMLHttpRequest();
x.onload = function() {
var out = x.response;
if (typeof out == 'string') {
out = JSON.parse(out);
}
callback(out);
};
x.onerror = function() {
alert('couldn\'t fetch dragon status');
};
if (action) {
x.open('POST', 'https://dragon-server.appspot.com/?action=' + action);
} else {
x.open('GET', 'https://dragon-server.appspot.com/');
}
x.send();
}
window.addEventListener('load', function() {
function createDataRow(name, value) {
var row = document.createElement('tr');
var th = document.createElement('th');
th.textContent = name;
row.appendChild(th);
var td = document.createElement('td');
td.textContent = value;
row.appendChild(td);
return row;
}
var timeout;
(function work(action) {
window.clearTimeout(timeout);
timeout = window.setTimeout(work, 60 * 1000); // 60s
if (action) { // clicked action, clear future actions
actions.textContent = '';
}
refresh(action, function(status) {
gold.textContent = '';
for (var i = 0; i < status.Gold; ++i) {
var coin = document.createElement('span');
coin.className = 'coin';
coin.style.top = Math.random() * 100 + '%';
coin.style.left = Math.random() * 100 + '%';
gold.appendChild(coin);
}
data.textContent = '';
data.appendChild(createDataRow('Gold', status.Gold));
data.appendChild(createDataRow('Size', status.Size + 'kg'));
// TO DO: update size
actions.textContent = '';
status.Actions.forEach(function(action) {
var button = document.createElement('button');
button.addEventListener('click', function(ev) {
ev.preventDefault();
work(action.ID);
});
button.textContent = action.Name;
actions.appendChild(button);
});
});
}());
});