211 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			211 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!doctype html>
 | |
| <html>
 | |
| <head>
 | |
|     <meta charset="utf-8">
 | |
|     <meta http-equiv="X-UA-Compatible" content="chrome=1">
 | |
|     <title>JAVM</title>
 | |
|     <link rel="stylesheet" href="styles.css">
 | |
|     <script src="respond.js"></script>
 | |
|     <!--[if lt IE 9]>
 | |
|     <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | |
|     <![endif]-->
 | |
|     <!--[if lt IE 8]>
 | |
|     <link rel="stylesheet" href="ie.css">
 | |
|     <![endif]-->
 | |
|     <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
 | |
|     <link rel="stylesheet" href="jquery-ui.css">
 | |
|     <script src="jquery.js"></script>
 | |
|     <script src="jquery-ui.js"></script>
 | |
|     <script src="underscore-min.js"></script>
 | |
|     <script>Josh = {Debug: false };</script>
 | |
|     <script src="killring.js"></script>
 | |
|     <script src="history.js"></script>
 | |
|     <script src="readline.js"></script>
 | |
|     <script src="shell.js"></script>
 | |
|     <script src="pathhandler.js"></script>
 | |
|     <style type="text/css">
 | |
|         #shell-panel {
 | |
|             height: 300px;
 | |
|             width: 100%;
 | |
|             background-color: #002f05;
 | |
|             color: #00fe00;
 | |
|             padding: 20px 20px 20px 20px;
 | |
|             font-family: 'Source Code Pro', Bitstream Vera Sans Mono, Lucida Console, Terminal, Courier;
 | |
|             font-size: 10pt;
 | |
|             overflow: scroll;
 | |
|             overflow-x: hidden;
 | |
|             overflow-y: scroll;
 | |
|             border: 1px dashed #E6EBE0;
 | |
|         }
 | |
| 
 | |
|         #shell-cli .prompt {
 | |
|             font-weight: bold;
 | |
|         }
 | |
|     </style>
 | |
|     <script>
 | |
|         var handleFileLoadCallback=function(){};
 | |
|         var Shell = {
 | |
|             shell:undefined,
 | |
|             stdout:undefined,
 | |
|             args:[],
 | |
|             env:undefined,
 | |
|             connect: function(uri) {
 | |
|                 var bport,buri;
 | |
|                 var args=uri.split(':');
 | |
|                 if (args && args.length==2) {
 | |
|                     Shell.args = ['browser', 'bash', '-bip', args[0], '-bport', args[1]];
 | |
|                     loadjs('bash.min.js');
 | |
|                 } else stdout('Can\'t connect to broker with URI '+uri+' (invalid)');
 | |
|             },
 | |
|             interpreter:function(){},
 | |
|             prompt:function () {return ' >';},
 | |
|             set:function (xname,xvalue) {
 | |
|                 document.getElementById(xname).value=xvalue;
 | |
|             },
 | |
|             status: function (xname,set) {
 | |
|                 if (set) document.getElementById(xname).style.backgroundColor = 'green';
 | |
|                 else document.getElementById(xname).style.backgroundColor = 'red';
 | |
|             },
 | |
|             update: function(xname,xvalue) {
 | |
|                 stdout(xname+':'+xvalue);
 | |
|             },
 | |
|             download: function(filename,size,data) {
 | |
|                 var element = document.createElement('a');
 | |
|                 element.setAttribute('href', 'data:text/plain;charset=utf-8,' + escape(data));
 | |
|                 element.setAttribute('download', filename);
 | |
|                 element.style.display = 'none';
 | |
|                 document.body.appendChild(element);
 | |
|                 element.click();
 | |
|                 document.body.removeChild(element);
 | |
|             },
 | |
|             upload: function (callback) {
 | |
|                 handleFileLoadCallback=callback;
 | |
|                 document.getElementById('loadfile').click();
 | |
|             }
 | |
|         };
 | |
|         function format(str) {
 | |
|             // Replace all spaces with   ?
 | |
|             var strht=$('<div>').text(str).html();
 | |
|             var strsp=strht.replace(/  /g,'  ');
 | |
|             var strnl=strsp.replace(/\n/g,'<br>');
 | |
|             return strnl;
 | |
|         }
 | |
|         function stdout(str) {
 | |
|             Shell.shell.renderOutput(format(str));
 | |
|         }
 | |
| 
 | |
|         function handleFileLoad(evt) {
 | |
|             var files = evt.target.files; // FileList object
 | |
|             // Loop through the FileList and render image files as thumbnails.
 | |
|             for (var i = 0, f; f = files[i]; i++) {
 | |
|                 var reader = new FileReader();
 | |
|                 var file=f;
 | |
|                 // Closure to capture the file information.
 | |
|                 reader.onload = (function(theFile) {
 | |
|                     return function(e) {
 | |
|                         var contents = e.target.result;
 | |
|                         handleFileLoadCallback(file.name,file.size,contents);
 | |
|                     };
 | |
|                 })(f);
 | |
| 
 | |
|                 // Read in the image file as a data URL.
 | |
|                 reader.readAsBinaryString(f);
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
|         Shell.stdout=stdout;
 | |
| 
 | |
|         function loadjs(filename) {
 | |
|             var fileref = document.createElement('script');
 | |
|             fileref.setAttribute("type", "text/javascript");
 | |
|             fileref.setAttribute("src", filename);
 | |
|             if (typeof fileref != "undefined")
 | |
|                 document.getElementsByTagName("head")[0].appendChild(fileref)
 | |
|         }
 | |
| 
 | |
|         $(document).ready(function() {
 | |
|             var history = new Josh.History({ key: 'josh.helloworld'});
 | |
|             var shell = Josh.Shell({history: history});
 | |
|             var $consolePanel = $('#shell-panel');
 | |
|             document.getElementById('loadfile').addEventListener('change', handleFileLoad, false);
 | |
| 
 | |
|             shell.onNewPrompt(function(callback) {
 | |
|                 callback(Shell.prompt());
 | |
|             });
 | |
|             shell.setCommandHandler('*', {
 | |
|                 exec: function(cmd, args, callback) {
 | |
|                     var arg = args[0] || '';
 | |
|                     Shell.interpreter(cmd,args,function (str) { callback(format(str)) });
 | |
|                 },
 | |
|                 completion: function(cmd, arg, line, callback) {
 | |
|                     if (Shell.env!=undefined) callback(shell.bestMatch(arg, Shell.env.workrows));
 | |
|                     else callback(shell.bestMatch(arg, ['dir', 'cd', 'mkdir']));
 | |
|                 }
 | |
|             });
 | |
|             $consolePanel.resizable({ handles: "w, e, s"});
 | |
|             shell.activate();
 | |
|             Shell.shell=shell;
 | |
|             Shell.set('afscap','');
 | |
|             // Test 
 | |
| 
 | |
|         });
 | |
|     </script>
 | |
| </head>
 | |
| <body>
 | |
| <div><br></div>
 | |
| 
 | |
| <div class="wrapper">
 | |
|     Drag right or bottom side of shell to change size.
 | |
|     <div onfocus="Shell.shell.activate();" id="shell-panel" tabindex="0">
 | |
|         <div style="font-weight: bold">JAM Virtual Machine Shell</div>
 | |
|         <div>Type <code>help</code> or hit <code>TAB</code> for a list of commands.
 | |
|         </div>
 | |
|         <div id="shell-view"></div>
 | |
|     </div>
 | |
|     <br>
 | |
|     <form>
 | |
|         <table>
 | |
|             <tr style="height:50px">
 | |
|                 <td>Broker Server URI:</td>
 | |
|                 <td><input onfocus="Shell.shell.deactivate();" size="50" type="text" id="brokeruri" value="localhost:3001"></td>
 | |
|                 <td><button class="indicator" id="brokerstatus"></button></td>
 | |
|                 <td><a onmouseover="" style="cursor: pointer;" title="Connect" onclick="Shell.connect(document.getElementById('brokeruri').value);"><img style="width:24px" src="connect.png"></a></td>
 | |
|                 <td></td>
 | |
|             </tr>
 | |
|             <tr style="height:50px">
 | |
|                 <td>Host Port:</td>
 | |
|                 <td><input onfocus="Shell.shell.deactivate();" size="50" type="text" id="hostport"></td>
 | |
|                 <td><button class="indicator" id="hoststatus"></button></td>
 | |
|                 <td><a onmouseover="" style="cursor: pointer;" title="Update Home" onclick="Shell.update('hostport',document.getElementById('hostport').value);"><img style="width:24px" src="home.png"></a></td>
 | |
|                 <td><a onmouseover="" style="cursor: pointer;" title="Add" onclick="Shell.update('hostport+',document.getElementById('hostport').value);"><img style="width:24px" src="add.png"></a></td>
 | |
|                 </td>
 | |
|             </tr>
 | |
|             <tr style="height:50px">
 | |
|                 <td>DNS Root Capability:</td>
 | |
|                 <td><input onfocus="Shell.shell.deactivate();" size="50" type="text" id="rootcap"></td>
 | |
|                 <td><button class="indicator" id="rootstatus"></button></td>
 | |
|                 <td><a onmouseover="" style="cursor: pointer;" title="Update Home" onclick="Shell.update('rootcap',document.getElementById('rootcap').value);"><img style="width:24px" src="home.png"></a></td>
 | |
|                 <td><a onmouseover="" style="cursor: pointer;" title="Add" onclick="Shell.update('rootcap+',document.getElementById('rootcap').value);"><img style="width:24px" src="add.png"></a></td>
 | |
|             </tr>
 | |
|             <tr style="height:50px">
 | |
|                 <td>AFS DEF Capability:</td>
 | |
|                 <td><input onfocus="Shell.shell.deactivate();" size="50" type="text" id="afscap"></td>
 | |
|                 <td><button class="indicator" id="afsstatus"></button></td>
 | |
|                 <td><a onmouseover="" style="cursor: pointer;" title="Update Home" onclick="Shell.update('afscap',document.getElementById('afscap').value);"><img style="width:24px" src="home.png"></a></td>
 | |
|                 <td><a onmouseover="" style="cursor: pointer;" title="Add" onclick="Shell.update('afscap+',document.getElementById('afscap').value);"><img style="width:24px" src="add.png"></a></td>
 | |
|             </tr>
 | |
|         </table>
 | |
| 
 | |
|     </form>
 | |
|     <script>
 | |
|         var form = document.querySelector("form");
 | |
|         form.addEventListener("submit", function(event) {
 | |
|             event.preventDefault();
 | |
|         });
 | |
|     </script>
 | |
|     <input type="file" id="loadfile" name="files[]" multiple style="display:none">
 | |
| </div>
 | |
| </body>
 |