Roo.js
[roojs1] / Roo.js
diff --git a/Roo.js b/Roo.js
index 64b5742..7545ed9 100644 (file)
--- a/Roo.js
+++ b/Roo.js
@@ -85,6 +85,12 @@ Roo.apply = function(o, c, defaults){
          * @type Boolean
          */
         isReady : false,
+        /**
+         * Turn on debugging output (currently only the factory uses this)
+         * @type Boolean
+         */
+        
+        debug: false,
 
         /**
          * True to automatically uncache orphaned Roo.Elements periodically (defaults to true)
@@ -297,7 +303,7 @@ Roo.factory(conf, Roo.data);
                 return c;
             }
             if (ns[c.xtype]) {
-                if (Roo.debug) console.log("Roo.Factory(" + c.xtype + ")");
+                if (Roo.debug) Roo.log("Roo.Factory(" + c.xtype + ")");
                 var ret = new ns[c.xtype](c);
                 ret.xns = false;
                 return ret;
@@ -305,7 +311,20 @@ Roo.factory(conf, Roo.data);
             c.xns = false; // prevent recursion..
             return c;
         },
-         
+         /**
+         * Logs to console if it can.
+         *
+         * @param {String|Object} string
+         * @method log
+         */
+        log : function(s)
+        {
+            if ((typeof(console) == 'undefined') || (typeof(console.log) == 'undefined')) {
+                return; // alerT?
+            }
+            console.log(s);
+            
+        },
         /**
          * Takes an object and converts it to an encoded URL. e.g. Roo.urlEncode({foo: 1, bar: 2}); would return "foo=1&bar=2".  Optionally, property values can be arrays, instead of keys and the resulting string that's returned will contain a name/value pair for each array value.
          * @param {Object} o
@@ -335,6 +354,59 @@ Roo.factory(conf, Roo.data);
             }
             buf.pop();
             return buf.join("");
+        },
+         /**
+         * Safe version of encodeURIComponent
+         * @param {String} str
+         * @return {String} 
+         */
+        
+        encodeURIComponent : function (str)
+        {
+            try {
+                return encodeURIComponent(str);
+            } catch(e) {} // should be an uri encode error.
+            
+            if (data == '' || data == null){
+               return '';
+            }
+            // http://stackoverflow.com/questions/2596483/unicode-and-uri-encoding-decoding-and-escaping-in-javascript
+            function nibble_to_hex(nibble){
+                var chars = '0123456789ABCDEF';
+                return chars.charAt(nibble);
+            }
+            data = data.toString();
+            var buffer = '';
+            for(var i=0; i<data.length; i++){
+                var c = data.charCodeAt(i);
+                var bs = new Array();
+                if (c > 0x10000){
+                        // 4 bytes
+                        bs[0] = 0xF0 | ((c & 0x1C0000) >>> 18);
+                        bs[1] = 0x80 | ((c & 0x3F000) >>> 12);
+                        bs[2] = 0x80 | ((c & 0xFC0) >>> 6);
+                    bs[3] = 0x80 | (c & 0x3F);
+                }else if (c > 0x800){
+                         // 3 bytes
+                         bs[0] = 0xE0 | ((c & 0xF000) >>> 12);
+                         bs[1] = 0x80 | ((c & 0xFC0) >>> 6);
+                        bs[2] = 0x80 | (c & 0x3F);
+                }else if (c > 0x80){
+                       // 2 bytes
+                        bs[0] = 0xC0 | ((c & 0x7C0) >>> 6);
+                       bs[1] = 0x80 | (c & 0x3F);
+                }else{
+                        // 1 byte
+                     bs[0] = c;
+                }
+                for(var j=0; j<bs.length; j++){
+                       var b = bs[j];
+                        var hex = nibble_to_hex((b & 0xF0) >>> 4) 
+                       + nibble_to_hex(b &0x0F);buffer += '%'+hex;
+               }
+            }
+            return encodeURIComponent(buffer);    
+             
         },
 
         /**
@@ -548,7 +620,23 @@ Roo.factory(conf, Roo.data);
          * you may want to set this to true.
          * @type Boolean
          */
-        useShims : ((isIE && !isIE7) || (isGecko && isMac))
+        useShims : ((isIE && !isIE7) || (isGecko && isMac)),
+        
+        
+                
+        /**
+         * Selects a single element as a Roo Element
+         * This is about as close as you can get to jQuery's $('do crazy stuff')
+         * @param {String} selector The selector/xpath query
+         * @param {Node} root (optional) The start of the query (defaults to document).
+         * @return {Roo.Element}
+         */
+        selectNode : function(selector, root) 
+        {
+            var node = Roo.DomQuery.selectNode(selector,root);
+            return node ? Roo.get(node) : new Roo.Element(false);
+        }
+        
     });