Subversion Repositories HomeAutomation

Rev

Rev 1610 | Rev 1644 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1.  
  2. function Console() { }
  3.  
  4. Console.autocomplete_callbacks = new Array();
  5. Console.help_text = new Array();
  6.  
  7. function Console_DoAutocomplete()
  8. {
  9.     var name = arguments[0];
  10.  
  11.     //Log("Console_DoAutocomplete(), name=" + name);
  12.    
  13.     var result = new Array();
  14.    
  15.     if (typeof Console.autocomplete_callbacks[name] != 'undefined')
  16.     {
  17.         //Log("calling autocomplete_callback");
  18.         result = Console.autocomplete_callbacks[name](arguments);
  19.     }
  20.    
  21.     var result_string = "";
  22.    
  23.     for (var n = 0; n < result.length; n++)
  24.     {
  25.         result_string += result[n] + "\n";
  26.     }
  27.    
  28.     return result_string;
  29. }
  30.  
  31. function RegisterConsoleCommand(command, autocomplete_callback)
  32. {
  33.     var command_string = command.toString();
  34.  
  35.     var pos_end = command_string.indexOf("\n") - 1;
  36.     var pos_start = command_string.indexOf(" ") + 1;
  37.    
  38.     var full_name = command_string.substr(pos_start, pos_end - pos_start);
  39.    
  40.     var pos_split = full_name.indexOf("(");
  41.    
  42.     var name = full_name.substr(0, pos_split);
  43.    
  44.     var argument_string = full_name.substr(pos_split + 1);
  45.    
  46.     if (argument_string.length > 0)
  47.     {
  48.         argument_string = argument_string.replace(/,/g, "");
  49.         argument_string = "<" + argument_string.replace(/ /g, "> <") + ">";
  50.     }
  51.    
  52.     if (Console_RegisterConsoleCommand(name))
  53.     {
  54.         Console.help_text[name] = argument_string;
  55.        
  56.        
  57.         if (autocomplete_callback)
  58.         {
  59.             Console.autocomplete_callbacks[name] = autocomplete_callback;
  60.         }
  61.        
  62.         return true;
  63.     }
  64.    
  65.     return false;
  66. }
  67.  
  68. function StandardAutocomplete()
  69. {
  70.     // First argument is the command line split
  71.     var command_line_parts = arguments[0];
  72.    
  73.     // command_line_parts[0] == command name
  74.     var arg_index = arguments[0].length - 2;
  75.    
  76.     // Supplied parameters to complete
  77.     var args_to_complete = arguments.length - 1;
  78.    
  79.     if (0 <= arg_index && arg_index < args_to_complete)
  80.     {
  81.         return arguments[arg_index + 1];
  82.     }
  83.    
  84.     return new Array();
  85. }
  86.  
  87. function help_complete(args)
  88. {
  89.     var result = new Array();
  90.    
  91.     var arg_index = args.length - 1;
  92.    
  93.     if (arg_index == 1) // command name
  94.     {
  95.         for (var n in Console.help_text)
  96.         {
  97.             result.push(n);
  98.         }
  99.     }
  100.    
  101.     return result;
  102. }
  103.  
  104. function help(command_name)
  105. {
  106.     if (!command_name)
  107.     {
  108.         command_name = "help";
  109.     }
  110.    
  111.     if (typeof Console.help_text[command_name] != 'undefined')
  112.     {
  113.         var result = "";
  114.        
  115.         if (Console.autocomplete_callbacks[command_name])
  116.         {
  117.             result += "Argument autocompletion enabled for " + command_name + "\n";
  118.         }
  119.        
  120.         result += "Syntax: " + command_name + " " + Console.help_text[command_name] + "\n";
  121.        
  122.         return result;
  123.     }
  124.    
  125.     return "No help for " + command_name + " found\n";
  126. }
  127. RegisterConsoleCommand(help, help_complete);
  128.