18313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish/* 28313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris RambishCopyright 2012 Google Inc. 38313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 48313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris RambishLicensed under the Apache License, Version 2.0 (the "License"); 58313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambishyou may not use this file except in compliance with the License. 68313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris RambishYou may obtain a copy of the License at 78313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 88313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish http://www.apache.org/licenses/LICENSE-2.0 98313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 108313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris RambishUnless required by applicable law or agreed to in writing, software 118313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambishdistributed under the License is distributed on an "AS IS" BASIS, 128313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris RambishWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris RambishSee the License for the specific language governing permissions and 148313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambishlimitations under the License. 158313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 168313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris RambishAuthor: Renato Mangini (mangini@chromium.org) 178313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish*/ 188313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 198313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish(function(exports) { 208313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 218313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish function Commands() { 228313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish this.commands={}; 238313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish } 248313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 258313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish Commands.prototype.addCommand=function(name, help, runnable) { 268313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish if (name in this.commands) { 278313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish console.log("WARNING: ignoring duplicate command "+name); 288313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish return; 298313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish } 308313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish this.commands[name] = {help: help, runnable: runnable}; 318313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish } 328313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 338313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish Commands.prototype.help=function(name, args) { 348313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish var result=''; 358313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish for (var command in this.commands) { 368313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish result+=command+'\t'+this.commands[command].help+"\n"; 378313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish } 388313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish return result; 398313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish /*if (! (name in this.commands)) { 408313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish return "Unknown command "+name; 418313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish } 428313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish var context={out: out}; 438313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish return this.commands[name].help.apply(context, args);*/ 448313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish } 458313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 468313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish Commands.prototype.run=function(name, args) { 478313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish if (name === 'help') { 488313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish return this.help(name, args); 498313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish } 508313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish if (! (name in this.commands)) { 518313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish throw 'Unknown command '+name+'. Try "help"'; 528313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish } 538313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish var context={}; 548313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish return this.commands[name].runnable.call(context, args); 558313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish } 568313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 578313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish exports.Commands=new Commands(); 588313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 598313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish})(window); 608313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 618313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 628313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris RambishCommands.addCommand("echo", 638313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish "Echo the arguments", 648313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish function(args) { 658313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish return args.join(' '); 668313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish }); 678313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish 688313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris RambishCommands.addCommand("open", 698313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish "Open the given URL", 708313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish function(args) { 718313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish chrome.app.window.create('commands/webview.html', {innerBounds: {width: 600, height: 400}}, 728313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish function(w) { 738313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish w.contentWindow.addEventListener("DOMContentLoaded", function() { 748313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish var doc=w.contentWindow.document; 758313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish var el=doc.querySelector("webview"); 768313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish el.src=args[0]; 778313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish }); 788313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish }); 798313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish return "ok, url "+args[0]+" open"; 808313563097d5e3fdcb20a71974dff1ae7b7b78f5Kris Rambish }); 81