コマンドラインでaddonsのアップデート その2

結果をtable作成を共通化してあと縞々にしました。
update の 件は 放置中で、plugins を 追加したました。


全コードはこちら
以下差分

diff -r 1b3bb4250281 update-addons.js
--- a/update-addons.js	Sat Aug 01 01:02:50 2009 +0900
+++ b/update-addons.js	Sat Aug 01 18:59:38 2009 +0900
@@ -1,33 +1,57 @@
 (function(){
   var T={
     get extensions() T.extensionManager.getItemList(Ci.nsIUpdateItem.TYPE_EXTENSION,{})
-		, subcommand:{
+    ,get plugins() T.pluginHost.getPluginTags({})
+    ,createTable:function(items,gene_body,gene_head){
+      var table = <table class="update-addons"></table>;
+      if(gene_head){
+        let head = <thead></thead>;
+        head.* += gene_head();
+        table.* += head;
+      }
+      let body = <tbody></tbody>;
+      for([,item] in Iterator(items)){
+        body.* += gene_body(item);
+      }
+      table.* += body;
+      return <>
+        <style><![CDATA[
+          .update-addons thead td{
+            font-weight:bold;
+            border-bottom: 1px dotted black
+          }
+          .update-addons tbody tr:nth-child(odd){
+            background-color: #eee;
+          }
+          .update-addons td{
+            padding: 0 0.5em;
+          }
+        ]]></style>
+        {table}
+      </>;
+		}, subcommand:{
 			list:{
 				desc: "show addon list"
 				,action:function(){
 					const attrs = ["name","version", "minAppVersion","maxAppVersion"];
-					let node = <thead>
-						<td>icon</td>
-					</thead>;
-					for(let [,a] in Iterator(attrs)){
-						node.* += <td>{a}</td>;
-					}
 
-					var xml = <table>
-						{node}
-						<tbody>
-						</tbody>
-					</table>;
-					for(let [,ext] in Iterator(T.extensions)){
-						let tr =<tr>
-							<td>{template.icon({icon:ext.iconURL},"")}</td>
-						</tr>;
-
+          var xml=T.createTable(T.extensions,function(item){
+            var tr = <tr>
+              <td>{template.icon({icon:item.iconURL},"")}</td>
+            </tr>;
 						for(let [,a] in Iterator(attrs)){
-							tr.* += <td>{ext[a]}</td>;
+							tr.* += <td>{item[a]}</td>;
 						}
-						xml.tbody.* += tr;
-					}
+            return tr;
+          },function(){
+            let tr = <tr>
+              <td>icon</td>
+            </tr>;
+            for(let [,a] in Iterator(attrs)){
+              tr.* += <td>{a}</td>;
+            }
+            return tr;
+          });
 					liberator.echo(xml);
 				}
 			},check:{
@@ -38,7 +62,14 @@
 					T.extensionManager.update(exts , exts.length
 						,Ci.nsIExtensionManager.UPDATE_CHECK_NEWVERSION,{
 						onUpdateEnded:function(){
-							T.showList(checkes);
+              liberator.echo(T.createTable(T.extensions
+              ,function(item) <tr>
+                <td>{template.icon({icon:item.iconURL},"")}</td>
+                <td>{item.name}</td>
+                <td>{item.version}</td>
+                <td>{T.state_msg[checkes[item.id]]}</td>
+              </tr>
+              ));
 						},onUpdateStarted:function(){
 						},onAddonUpdateEnded:function(addon,state){
 							checkes[addon.id] = state;
@@ -52,20 +83,24 @@
 					if(ext.length > 0)
 						T.extensionManager.addDownloads(ext, ext.length,null);
 				}
-			}
-    },
-    showList:function(checkes){
-      var xml = <table></table>;
-      for(let [,ext] in Iterator(T.extensions)){
-        xml.* += <tr>
-          <td>{template.icon({icon:ext.iconURL},"")}</td>
-          <td>{ext.name}</td>
-          <td>{ext.version}</td>
-          <td>{T.state_msg[checkes[ext.id]]}</td>
-        </tr>;
+			}, plugins:{
+        desc:"plugin list"
+        ,action:function(){
+          var chk = {
+            "false":<input type="checkbox" checked="true"/>
+            ,"true":<input type="checkbox" disabled="true"/>
+          };
+          var x = T.createTable(T.plugins
+            ,function(o) <tr>
+              <td>{chk[o.disabled]}</td>
+              <td>{o.name}</td>
+              <td>{o.version}</td>
+              <td>{o.description}</td>
+            </tr>);
+          liberator.echo(x);
+        }
       }
-      liberator.echo(xml);
-    },names:["updateaddon"]
+    }, names:["updateaddon"]
     ,desc: "update addons"
     ,action:function(args){
 			var command = T.subcommand[args[0]];
@@ -87,7 +122,7 @@
 
   T.extensionManager = Cc["@mozilla.org/extensions/manager;1"]
 		.getService(Ci.nsIExtensionManager);
-  plugins.ex = T.extensions;
+  T.pluginHost = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost);
 
   commands.removeUserCommand(T.names[0]);
   commands.addUserCommand(T.names, T.desc, T.action,T.option);