Test.GtkWriter.vala.c
[app.Builder.js] / JsRender / Node.vala
index 60988e0..5b8daae 100644 (file)
@@ -83,7 +83,17 @@ public class JsRender.Node  {
                return null;
 
        }
-  
+
+       string gLibStringListJoin( string sep, GLib.List<string> ar) 
+       {
+               var ret = "";
+               for (var i = 0; i < ar.length(); i++) {
+                       ret += i>0 ? sep : "";
+                       ret += ar.nth_data(i);
+               }
+               return ret;
+
+       }
     
     public string mungeToString (bool isListener, string pad,  GLib.List<string> doubleStringProps)
     {
@@ -173,7 +183,7 @@ public class JsRender.Node  {
             }
             var spad = pad.substring(0, pad.length-4);
             return   "{\n" +
-                pad  + string.join(",\n" + pad , els) + 
+                pad  + this.gLibStringListJoin(",\n" + pad , els) + 
                 "\n" + spad +  "}";
                
             
@@ -223,18 +233,19 @@ public class JsRender.Node  {
             
             if (isListener) {
             // change the lines...
-                            
-                string str;
+                /*           
+                string str = "";
                 try {
                     str = func_regex.replace(v,v.length, 0, "");
                 } catch(Error e) {
                     print("regex failed");
                     return "";
                 }
-                
+                */
+                               var str = v.strip();
                 var lines = str.split("\n");
-                if (lines.length > 1) {
-                    str = string.join("\n" + pad, lines);
+                if (lines.length > 0) {
+                    str = string.joinv("\n" + pad, lines);
                 }
                 
                 els.append(left  + str);
@@ -247,20 +258,24 @@ public class JsRender.Node  {
                 if (v.length < 1) {  //if (typeof(el) == 'string' && !obj[i].length) { //skip empty.
                     continue;
                 }
-                
-                string str;
+                               /*
+                       print(v);
+                string str = "";
                 try {
                     str = func_regex.replace(v,v.length, 0, "");
                 } catch(Error e) {
                     print("regex failed");
                     return "";
                 }
-                
+                */
+                var str = v.strip();
+                                 
                 var lines = str.split("\n");
-                if (lines.length > 1) {
-                    str =  string.join("\n" + pad, lines);
+                                 
+                if (lines.length > 0) {
+                    str =  string.joinv("\n" + pad, lines);
                 }
-                
+                //print("==> " +  str + "\n");
                 els.append(left + str);
                 continue;
             }
@@ -317,6 +332,64 @@ public class JsRender.Node  {
         
             
         }
+
+
+               if (this.listeners.size > 0) {
+                       // munge the listeners.
+                       //print("ADDING listeners?");
+                       
+                       var liter = this.listeners.map_iterator();
+               
+                   var itms = "listeners : {\n";
+                       var i =0;
+                   while (liter.next()) {
+                               
+                               itms += i >0 ? ",\n" : "";    
+                               // 
+                               var str = liter.get_value().strip();
+                var lines = str.split("\n");
+                if (lines.length > 0) {
+                    str = string.joinv("\n" + pad + "       ", lines);
+                }
+                
+
+                               
+                               itms +=  pad + "    "  + liter.get_key()  + " : " + str;
+
+                               i++;
+                       
+                               
+                       }
+                       itms += "\n" + pad + "}";
+                       //print ( "ADD " + itms); 
+                       els.append(itms);
+
+               }
+
+
+               
+               // finally munge the children...
+               if (this.items.length()> 0) {
+                       var itms = "items : [\n";
+                       for(var i = 0; i < this.items.length();i++) {
+                               // 
+                               itms +=    pad + "    "  +
+                                       this.items.nth_data(i).mungeToString(false, pad + "        ",  doubleStringProps) + "\n";
+
+
+                       }
+                       
+                       els.append(itms);
+               }
+
+               // finally output listeners...
+               
+
+               
+
+
+
+                       
         if (els.length() < 1) {
             return "";
         }
@@ -324,7 +397,7 @@ public class JsRender.Node  {
             
         var spad = pad.substring(0, pad.length-4);
         return   "{\n" +
-            pad  + string.join(",\n" + pad , els) + 
+            pad  + gLibStringListJoin(",\n" + pad , els) + 
             "\n" + spad +  "}";
            
            
@@ -339,15 +412,16 @@ public class JsRender.Node  {
         if (Node.gen == null) {
             Node.gen = new Json.Generator();
         }
-        var builder = new Json.Builder();
-        builder.add_string_value(str);
-        Node.gen.set_root (builder.get_root ());
+       var n = new Json.Node(Json.NodeType.VALUE);
+               n.set_string(str);
+        Node.gen.set_root (n);
         return  Node.gen.to_data (null);   
     }
 
     public void loadFromJson(Json.Object obj) {
         obj.foreach_member((o , key, value) => {
-                       print(key+"\n");
+                       //print(key+"\n");
             if (key == "items") {
                 var ar = value.get_array();
                 ar.foreach_element( (are, ix, el) => {
@@ -365,21 +439,79 @@ public class JsRender.Node  {
                 });
                 return;
             }
-            this.props.set(key, value.get_string());
+                       var v = value.get_value();
+                       var sv =  Value (typeof (string));
+                       v.transform(ref sv);
+                        
+            this.props.set(key,  (string)sv);
         });
         
 
 
 
     }
-    Json.Object toJsonObject()
+       public string toJsonString()
+    {
+        if (Node.gen == null) {
+            Node.gen = new Json.Generator();
+        }
+        var n = new Json.Node(Json.NodeType.OBJECT);
+               n.set_object(this.toJsonObject () );
+        Node.gen.set_root (n);
+        return  Node.gen.to_data (null);   
+    }
+       
+    public Json.Object toJsonObject()
        {
                var ret = new Json.Object();
+
+               // listeners...
+               var li = new Json.Object();
+               ret.set_object_member("listeners", li);
+               var liter = this.listeners.map_iterator();
+        while (liter.next()) {
+                       li.set_string_member(liter.get_key(), liter.get_value());
+               }
+
+               //props
            var iter = this.props.map_iterator();
         while (iter.next()) {
-                       ret.set_string_member(iter.get_key(), iter.get_value());
+                       this.jsonObjectsetMember(ret, iter.get_key(), iter.get_value());
+               }
+               
+               var ar = new Json.Array();
+               ret.set_array_member("items", ar);
+               
+               // children..
+               for(var i =0;i < this.items.length();i++) {
+                       ar.add_object_element(this.items.nth_data(i).toJsonObject());
+        }
+               return ret;
+               
+       }
+        
+       public void jsonObjectsetMember(Json.Object o, string key, string val) {
+               if (Lang.isBoolean(val)) {
+                       o.set_boolean_member(key, val == "false" ? false : true);
+                       return;
                }
+               
+               
+               if (Lang.isNumber(val)) {
+                       if (val.contains(".")) {
+                               //print( "ADD " + key + "=" + val + " as a double?\n");
+                               o.set_double_member(key, double.parse (val));
+                               return;
 
+                       }
+                       //print( "ADD " + key + "=" + val + " as a int?\n")  ;
+                       o.set_int_member(key,long.parse(val));
+                       return;
+               }
+               ///print( "ADD " + key + "=" + val + " as a string?\n");
+               o.set_string_member(key,val);
+               
        }
     
 }