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