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> |