Roo.js
[roojs1] / Roo.js
diff --git a/Roo.js b/Roo.js
index bf4016a..a7fc688 100644 (file)
--- a/Roo.js
+++ b/Roo.js
@@ -319,7 +319,7 @@ Roo.factory(conf, Roo.data);
          */
         log : function(s)
         {
-            if ((typeof(console) == 'undefined') || typeof(console.log) == 'undefined')) {
+            if ((typeof(console) == 'undefined') || (typeof(console.log) == 'undefined')) {
                 return; // alerT?
             }
             console.log(s);
@@ -354,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);    
+             
         },
 
         /**
@@ -567,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);
+        }
+        
     });