EVR.include("history/record/Record.js");
EVR.include("history/Parser.js");
EVR.include("history/view/View.js");
EVR.History = function(container)
{
   EVR.Pop_Up.call(this, container, HISTORY_WIDTH, HISTORY_HEIGHT);
   this.set_location();
   this.load();
   this.view = new EVR.History.View(this);
}
EVR.History.prototype = new EVR.Pop_Up;
EVR.History.prototype.set_location = function()
{
   this.location = SOURCE_PATH + "history/";
}
EVR.History.prototype.load = function()
{
   var path = this.location + "fetch.php";
   var document = new EVR.Requester(path, null, true).execute();
   this.records = new EVR.History.Parser(document).records;
}
EVR.History.prototype.set_level = function(level)
{
   this.level = level;
}
EVR.History.prototype.store_newest_record = function()
{
   this.build_newest_record();
   this.store_record(this.newest);
}
EVR.History.prototype.build_newest_record = function()
{
   var level = this.level;
   var time = level.clock.time.get();
   var accuracy = level.road.path.calculate_accuracy();
   this.newest = new EVR.History.Record(level.id, time, accuracy);
}
EVR.History.prototype.store_record = function(record)
{
   this.records.push(record);
   var id = record.level;
   var time = record.time.valueOf();
   var accuracy = record.accuracy.valueOf();
   var path = this.location + "insert.php";
   var query = "level=" + id + "&time=" + time + "&accuracy=" + accuracy;
   new EVR.Requester(path, query).execute();
}
EVR.History.prototype.get_accuracies = function()
{
   return this.get_field("accuracy");
}
EVR.History.prototype.get_times = function()
{
   return this.get_field("time");
}
EVR.History.prototype.get_field = function(field)
{
   var records = this.records;
   var entries = [];
   for (var ii = 0; ii < records.length; ii++)
   {
      if (records[ii].level == this.level.id)
      {
	 entries.push(records[ii][field]);
      }
   }
   return entries;
}
EVR.History.prototype.get_newest = function()
{
   return this.newest;
}
EVR.History.prototype.get_best_time = function()
{
   var times = this.get_times();
   var time, best = null;
   for (var ii = 0; ii < times.length; ii++)
   {
      time = times[ii];
      if (time < best || best == null)
      {
	 best = time;
      }
   }
   return best;
}
EVR.History.prototype.count_records = function()
{
   return this.records.length;
}
EVR.History.prototype.append = function()
{
   EVR.Pop_Up.prototype.append.call(this);
   this.view.build();
}
EVR.History.prototype.draw = function()
{
   EVR.Pop_Up.prototype.draw.call(this);
   this.view.draw();
}
EVR.History.prototype.remove = function()
{
   EVR.Pop_Up.prototype.remove.call(this);
   this.view.reset();
}
EVR.History.prototype.toString = function()
{
   return "[EVR.History]";
}
<?php
require_once "../account/get_user_path.php";
$GLOBALS["HISTORY_FILE_NAME"] = "history.gz";
$path = account\get_user_path() . $GLOBALS["HISTORY_FILE_NAME"];
ob_start();
readgzfile($path);
ob_end_flush();
<?php
require_once "../account/get_user_path.php";
$GLOBALS["HISTORY_FILE_NAME"] = "history.gz";
$path = account\get_user_path() . $GLOBALS["HISTORY_FILE_NAME"];
$level = $_GET["level"];
$time = $_GET["time"];
$accuracy = $_GET["accuracy"];
$file = gzopen($path, "a");
gzwrite($file, "$level $time $accuracy\n");
EVR.include("history/record/Time.js");
EVR.include("history/record/Accuracy.js");
EVR.History.Record = function(level, time, accuracy)
{
   this.level = level;
   this.time = new EVR.History.Record.Time(time);
   this.accuracy = new EVR.History.Record.Accuracy(accuracy);
}
EVR.History.Record.prototype.toString = function()
{
   return "[object EVR.History.Record]";
}
EVR.History.Record.Time = function(time)
{
   EVR.Time.call(this, time);
}
EVR.History.Record.Time.prototype = new EVR.Time;
EVR.History.Record.Time.prototype.toString = function(precision)
{
   if (precision == null)
   {
      precision = CLOCK_PRECISION;
   }
   var minutes = this.get_minutes();
   var seconds = this.pad(this.get_seconds() % 60, 2);
   var display = minutes + ":" + seconds;
   if (precision > 0)
   {
      var milliseconds = this.pad(this.get_milliseconds(precision), precision);
      display += "." + milliseconds;
   }
   return display;
}
EVR.History.Record.Time.prototype.valueOf = function()
{
   return this.get();
}
EVR.History.Record.Accuracy = function(accuracy)
{
   this.accuracy = accuracy;
}
EVR.History.Record.Accuracy.prototype.toString = function(precision)
{
   if (precision == null)
   {
      precision = ACCURACY_PRECISION;
   }
   return (100 * this.accuracy).toFixed(precision) + "%";
}
EVR.History.Record.Accuracy.prototype.valueOf = function()
{
   return parseFloat(this.accuracy);
}
EVR.include("history/view/level/Level.js");
EVR.History.View = function(history)
{
   EVR.Table.call(this, history, "100%", null);
   this.field = history.container;
   this.cell_count = HISTORY_CELL_COUNT;
   this.levels = [];
   this.record_index = 0;
   this.set_attributes();
   this.append();
}
EVR.History.View.prototype = new EVR.Table;
EVR.History.View.prototype.set_attributes = function()
{
   var element = this.element;
   element.cellSpacing = HISTORY_CELL_SPACING;
   var style = element.style;
   style.textAlign = "center";
   style.verticalAlign = "middle";
   style.color = "#404040";
   this.container.set_color(HISTORY_BACKGROUND);
}
EVR.History.View.prototype.build = function()
{
   this.records = this.container.records.sort(this.compare_records);
   while (this.record_index < this.records.length)
   {
      this.levels.push(new EVR.History.View.Level(this));
      this.advance_record_to_next_level();
   }
}
EVR.History.View.prototype.compare_records = function(a, b)
{
   var swap = a.level - b.level;
   if (swap === 0)
   {
      swap = a.time - b.time;
   }
   return swap;
}
EVR.History.View.prototype.advance_record_to_next_level = function()
{
   var ii = this.record_index;
   var records = this.records;
   var current = records[ii].level;
   while (ii < records.length && records[ii].level == current)
   {
      ii++;
   }
   this.record_index = ii;
}
EVR.History.View.prototype.reset = function()
{
   this.clear();
   this.record_index = 0;
   this.levels = [];
}
EVR.History.View.prototype.draw = function()
{
   var levels = this.levels;
   for (var ii = 0; ii < levels.length; ii++)
   {
      levels[ii].draw();
   }
}
EVR.History.View.prototype.toString = function()
{
   return "[object EVR.History.View]";
}
52.14.91.107
52.14.91.107
52.14.91.107
 
January 28, 2014


E F F L U E N C E