src/JsRender/Roo.vala
[app.Builder.js] / src / JsRender / NodeToJs.vala
index 4f78194..eb5691f 100644 (file)
@@ -175,43 +175,37 @@ public class JsRender.NodeToJs : Object {
                var suffix = "";
                // output the items...
                // work out remaining items...
-               var  total_nodes = this.out_props.size + 
-                               this.out_props_array_plain.size + 
-                               (this.out_listeners.size > 0 ? 1 : 0) +
-                               this.out_nodeprops.size +
-                               this.out_props_array.size +
-                               (this.out_children.size > 0 ? 1 : 0);
-               
-               
+        
                
                // plain properties.
                var iter = this.orderedPropKeys().list_iterator();
                while(iter.next()) {
-                       total_nodes--;
-                       suffix = total_nodes > 0 ? "," : "";
+                        
                        var k = iter.get();
                        var v = this.out_props.get(k);
-                       
+                       this.node.setLine(this.cur_line, "p",k); //listener
                        this.addLine(this.pad + k + " : " + v + suffix, ',');
                }
         
                // listeners..
                
                if (this.out_listeners.size > 0 ) { 
-                       total_nodes--;
-                       this.addLine(this.pad + "listeners : {", '');
+                        
+                       this.addLine(this.pad + "listeners : {", 0);
                        iter = this.orderedListenerKeys().list_iterator();
                         
-                       var sz = this.out_listeners.size;
                        while(iter.next()) {
-                               sz--;
-                               suffix = sz > 0 ? "," : "";
+                               
                                var k = iter.get();
                                var v = this.out_listeners.get(k);
-                               this.addMultiLine(this.pad + indent_str + k + " : " + v + suffix);
+                               this.addLine(this.pad + indent_str + k + " : ", 0);
+                               this.node.setLine(this.cur_line, "l",k); //listener
+                               this.addLine( v,',');
                        }
-                       suffix = total_nodes > 0 ? "," : "";
-                       this.addLine(this.pad + "}" + suffix);                  
+                       
+                       this.closeLine();
+                       this.addLine(this.pad + "}" ,',');
                        
                }
                
@@ -226,52 +220,48 @@ public class JsRender.NodeToJs : Object {
                var niter = this.out_nodeprops.map_iterator();
 
                while(niter.next()) {
-                       total_nodes--;
-                       suffix = total_nodes > 0 ? "," : "";
-                       var l = this.pad + niter.get_key() + " : " + 
-                                       this.mungeChildNew(this.pad + indent_str, niter.get_value()) + suffix;
-                       this.addMultiLine(l);
+                       this.addLine(this.pad + niter.get_key() + " : ", 0);
+                       var addstr = this.mungeChildNew(this.pad + indent_str, niter.get_value());
+                       this.addLine(addstr,',') ;
+                       
                }                        
                // prop arrays...
                
                var piter = this.out_props_array.map_iterator();
 
                while(piter.next()) {
-                       total_nodes--;
 
-                       this.addLine(this.pad + piter.get_key() + " : [");
+                       this.addLine(this.pad + piter.get_key() + " : [", 0);
+                       
                        var pliter = piter.get_value().list_iterator();
                        while (pliter.next()) {
-                               suffix = pliter.has_next()  ? "," : "";
-                               this.addMultiLine(this.pad + indent_str + 
-                                       this.mungeChildNew(this.pad + indent_str  + indent_str, pliter.get()) + suffix);
+                               var addstr = this.mungeChildNew(this.pad + indent_str  + indent_str, pliter.get());
+                               this.addLine(this.pad + indent_str + addstr, ',');
                        }
-
-                       suffix = total_nodes > 0 ? "," : "";
-                       this.addLine(this.pad + "]" + suffix);                  
+                       this.closeLine();
+                       this.addLine(this.pad + "]" , ',');                     
                }       
                
                // children..
                if (this.out_children.size > 0) {
-                       this.addLine(this.pad + "items  : [" );
+                       this.addLine(this.pad + "items  : [" , 0);
                        var cniter = this.out_children.list_iterator();
                        while (cniter.next()) {
                                suffix = cniter.has_next()  ? "," : "";
-                               this.addMultiLine(this.pad + indent_str +
-                                       this.mungeChildNew(this.pad + indent_str  + indent_str, cniter.get()) + suffix
-                               );
+                               var addstr = this.mungeChildNew(this.pad + indent_str  + indent_str, cniter.get());
+                               this.addLine(this.pad + indent_str + addstr, ',');
                                
                        }
-                       
-                       this.addLine(this.pad +   "]");
+                       this.closeLine();
+                       this.addLine(this.pad +   "]",',');
                }
                
+               this.closeLine();
                if (this.node.props.has_key("* xinclude")) {
-                       this.ret += spad + "})";
+                       this.addLine(spad + "})",0);
         
                } else {
-                       this.ret += spad + "}";
+                       this.addLine( spad + "}", 0);
                }
                
                this.node.sortLines();
@@ -298,7 +288,8 @@ public class JsRender.NodeToJs : Object {
        */
        public void addLine(string str, char line_end)
        {
-               this.ret += (this.line_end == 0 ? "" : this.last_line_end) + "\n"; 
+               this.ret += (this.last_line_end == 0 ? "" : this.last_line_end.to_string()) + "\n"; 
+               this.last_line_end = line_end;
                this.cur_line += str.split("\n").length;
                this.ret += str;
                
@@ -307,6 +298,10 @@ public class JsRender.NodeToJs : Object {
                
                
        }
+       public void closeLine() // send this before '}' or ']' to block output of ',' ...
+       {
+               this.last_line_end = 0;
+       }
        
 /*     public void addMultiLine(str= "")
        {