var tzElement = document.getElementById("tzArea"); var tz_offset = tzElement.innerHTML; var dateElement = document.getElementById("dateArea"); var date_s = dateElement.innerHTML; var start_hour = 0; var start_m = start_hour*60; var start_s = start_m*60; var endbefore_hour = 24; var hour_count = endbefore_hour - start_hour; var hour_width = 60; // 60 pixels per hour var pixels_per_m = hour_width/60.0; var pixels_per_s = pixels_per_m/60.0; var player_name_width = 100; var text_size = 16.0; var row_y_offset = text_size * (22.0/16.0); // if 16px font is drawn at (x,16), line at (x,21) is one pixel away from the bottom of the descenders var border_y = 0.5; //canvas uses 0.5 as middle of pixel var border_start_x = 0.5+player_name_width; var border_x = border_start_x; var text_y = text_size; var text_start_x = 3.5; var players = []; var stats_html = ""; var time_area_width = hour_width*hour_count; var canvas_w = player_name_width + time_area_width; stats_html += '
' + hour_count + "hrs * " + hour_width + "px = " + time_area_width + '
' stats_html += '
' + time_area_width + "px + " + player_name_width + "px player name = " + canvas_w + 'px canvas width
' var outputElement = document.getElementById("outputArea"); var statusElement = document.getElementById("statusArea"); statusElement.innerHTML="..."; function draw_players() { var canvas = document.getElementById("myCanvas"); canvas.width = canvas_w; var ctx = canvas.getContext("2d"); ctx.font = text_size+"px Arial"; var arrayLength = players.length; var text_x; var index = -1; for (var i = 0; index < arrayLength; i++) { ctx.font = text_size+"px Arial"; text_x = text_start_x; ctx.fillStyle = "#dce5ea"; ctx.fillRect(0, border_y+1.0, player_name_width, row_y_offset-1.0); //ctx.stroke(); ctx.fillStyle = "#000000"; ctx.moveTo(0, border_y); ctx.strokeStyle = "#000000"; ctx.lineTo(canvas_w, border_y); //ctx.stroke(); ctx.fillStyle = "#000000"; if (index==-1) { ctx.font = "bold "+text_size+"px Arial"; ctx.fillText("Name", text_x, text_y); ctx.font = text_size+"px Arial"; text_x = player_name_width+0.5; //ctx.fillStyle = "#000000"; ctx.strokeStyle = "#008000"; for (var hour=0; hour=3) { login_places[0] -= Math.floor(tz_offset/60); } if (!plays[s_i].hasOwnProperty("logout_time")) { plays[s_i].logout_time = "23:59:59"; } var logout_places = plays[s_i].logout_time.split(':'); if (logout_places.length>=3) { logout_places[0] -= Math.floor(tz_offset/60); } var login_second = (+login_places[0]) * 60 * 60 + (+login_places[1]) * 60 + (+login_places[2]); var login_m = login_second / 60.0; var logout_second = (+logout_places[0]) * 60 * 60 + (+logout_places[1]) * 60 + (+logout_places[2]); var logout_m = logout_second / 60.0; var left_x = border_x + (login_m-start_m)*pixels_per_m; var right_x = border_x + (logout_m-start_m)*pixels_per_m; if (right_x= 200 && this.status < 400) { // Success! statusElement.innerHTML = "loaded player(s)"; if (!statusElement.classList.contains('alert') ) { statusElement.classList.add('alert'); } try { players = JSON.parse(this.response); statusElement.classList.add('alert-success'); statusElement.innerHTML = "loaded " + players.length + ' player(s) from "'+this.responseURL+'"'; draw_players(); } catch(e) { statusElement.classList.add('alert-warning'); statusElement.innerHTML = e + " for URL '"+request_href+"'"; //alert(this.response); } } else { // We reached our target server, but it returned an error statusElement.innerHTML = "Error " + this.status + " accessing " + request_href; } }; request.onerror = function() { // There was a connection error of some sort }; request.send();