114 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
function Terminal(rune)
 | 
						|
{
 | 
						|
  Module.call(this,">");
 | 
						|
 | 
						|
  this.element = document.createElement("div");
 | 
						|
  this.input = document.createElement("input");
 | 
						|
  this.hint_element = document.createElement("div");
 | 
						|
  this.logs_element = document.createElement("div");
 | 
						|
  this.hint_element.id = "hint";
 | 
						|
  this.logs_element.id = "logs";
 | 
						|
  this.logs_element.innerHTML = "<log>Hello there</log>";
 | 
						|
 | 
						|
  this.history = [];
 | 
						|
  this.locks = [];
 | 
						|
 | 
						|
  this.add_method(new Method("save",["text"]));
 | 
						|
  this.add_method(new Method("load",["path"]));
 | 
						|
 | 
						|
  // Module
 | 
						|
  this.install = function(cmd)
 | 
						|
  {
 | 
						|
    this.element.appendChild(this.input);
 | 
						|
    this.element.appendChild(this.hint_element);
 | 
						|
    this.element.appendChild(this.logs_element);
 | 
						|
    
 | 
						|
    this.input.value = ""
 | 
						|
    this.hint_element.innerHTML = "";
 | 
						|
  }
 | 
						|
 | 
						|
  this.run = function(target_cmd)
 | 
						|
  {
 | 
						|
    var command = target_cmd ? target_cmd : this.cmd();
 | 
						|
    var module  = command.module();
 | 
						|
    var method  = command.method();
 | 
						|
    var setting = command.setting();
 | 
						|
 | 
						|
    console.info(command.content);
 | 
						|
 | 
						|
    if(method){
 | 
						|
      method.run(command);
 | 
						|
    }
 | 
						|
    if(setting){
 | 
						|
      module.settings[setting] = command.values();
 | 
						|
      this.log(new Log(module,setting+" = "+command.values()));
 | 
						|
    }
 | 
						|
    this.hint_element.innerHTML = "";
 | 
						|
    this.input.value = "";
 | 
						|
  }
 | 
						|
 | 
						|
  this.update = function(value = null)
 | 
						|
  {
 | 
						|
    if(value){ this.input.value = value; this.input.focus(); }
 | 
						|
 | 
						|
    var command = this.cmd();
 | 
						|
    var module  = command.module();
 | 
						|
    var method  = command.method();
 | 
						|
 | 
						|
    if(method){
 | 
						|
      method.preview(command);
 | 
						|
    }
 | 
						|
    this.hint_element.innerHTML = "<span class='input'>"+this.input.value+"</span>"+(this.input.value ? " " : "")+(module ? module.hint(method) : this.hint(method));
 | 
						|
    ronin.cursor.set_mode(module);
 | 
						|
  }
 | 
						|
 | 
						|
  this.run_multi = function(lines)
 | 
						|
  {
 | 
						|
    lines = lines.split(";")
 | 
						|
    for(id in lines){
 | 
						|
      var cmd = new Command(lines[id]);
 | 
						|
      this.run(cmd);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  this.hint = function(method)
 | 
						|
  {
 | 
						|
    var html = "";
 | 
						|
    if(this.input.value){
 | 
						|
      for(id in ronin.modules){
 | 
						|
        if(this.input.value != ronin.modules[id].name.substr(0,this.input.value.length)){ continue; }
 | 
						|
        html += "<span class='module'>"+ronin.modules[id].name+"</span> ";
 | 
						|
      }
 | 
						|
    }
 | 
						|
    else{
 | 
						|
      for(id in ronin.modules){
 | 
						|
        html += "<span class='module'>"+ronin.modules[id].name+"</span> ";
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return html;
 | 
						|
  }
 | 
						|
 | 
						|
  this.log = function(log)
 | 
						|
  {
 | 
						|
    this.logs_element.innerHTML = "";
 | 
						|
    this.logs_element.appendChild(log.element);
 | 
						|
  }
 | 
						|
 | 
						|
  this.cmd = function()
 | 
						|
  {
 | 
						|
    return new Command(this.input.value);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
// Log
 | 
						|
 | 
						|
function Log(host,message,error = false)
 | 
						|
{
 | 
						|
  this.host = host;
 | 
						|
  this.message = message;
 | 
						|
  this.error = error;
 | 
						|
  this.element = document.createElement("log");
 | 
						|
  this.element.setAttribute("class",error ? "error" : "okay");
 | 
						|
  this.element.innerHTML = "<span class='module'>"+host.name+"</span> "+message;
 | 
						|
  console.log(this.host.constructor.name,this.message);
 | 
						|
} |