Roo.js
[roojs1] / roojs-core-debug.js
index 9599b80..b091f14 100644 (file)
@@ -567,7 +567,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);
+        }
+        
     });
 
 
@@ -7805,7 +7821,9 @@ if(opt.anim.isAnimated()){
          * @param {Object}   options   (optional)An object with standard {@link Roo.EventManager#addListener} options
          */
         addListener : function(eventName, fn, scope, options){
-            Roo.EventManager.on(this.dom,  eventName, fn, scope || this, options);
+            if (this.dom) {
+                Roo.EventManager.on(this.dom,  eventName, fn, scope || this, options);
+            }
         },
 
         /**
@@ -12261,7 +12279,7 @@ Roo.extend(Roo.util.MixedCollection, Roo.util.Observable, {
         this.fireEvent("add", this.length-1, o, key);
         return o;
     },
-   
+       
 /**
   * MixedCollection has a generic way to fetch keys if you implement getKey.
 <pre><code>
@@ -12770,7 +12788,10 @@ Roo.util.JSON = new (function(){
      * @param {Mixed} o The variable to encode
      * @return {String} The JSON string
      */
-    this.encode = function(o){
+    this.encode = function(o)
+    {
+        // should this be extended to fully wrap stringify..
+        
         if(typeof o == "undefined" || o === null){
             return "null";
         }else if(o instanceof Array){
@@ -12814,22 +12835,20 @@ Roo.util.JSON = new (function(){
      * @return {Object} The resulting object
      */
     this.decode = function(json){
-        /**
-         * eval:var:json
-         */
-        return eval("(" + json + ')');
+        
+        return  /** eval:var:json */ eval("(" + json + ')');
     };
 })();
 /** 
  * Shorthand for {@link Roo.util.JSON#encode}
  * @member Roo encode 
  * @method */
-Roo.encode = Roo.util.JSON.encode;
+Roo.encode = typeof(JSON) != 'undefined' && JSON.stringify ? JSON.stringify : Roo.util.JSON.encode;
 /** 
  * Shorthand for {@link Roo.util.JSON#decode}
  * @member Roo decode 
  * @method */
-Roo.decode = Roo.util.JSON.decode;
+Roo.decode = typeof(JSON) != 'undefined' && JSON.parse ? JSON.parse : Roo.util.JSON.decode;
 /*
  * Based on:
  * Ext JS Library 1.1.1
@@ -12949,6 +12968,46 @@ Roo.util.Format = function(){
             }
         },
 
+       
+        /**
+         * safer version of Math.toFixed..??/
+         * @param {Number/String} value The numeric value to format
+         * @param {Number/String} value Decimal places 
+         * @return {String} The formatted currency string
+         */
+        toFixed : function(v, n)
+        {
+            // why not use to fixed - precision is buggered???
+            if (!n) {
+                return Math.round(v-0);
+            }
+            var fact = Math.pow(10,n+1);
+            v = (Math.round((v-0)*fact))/fact;
+            var z = (''+fact).substring(2);
+            if (v == Math.floor(v)) {
+                return Math.floor(v) + '.' + z;
+            }
+            
+            // now just padd decimals..
+            var ps = String(v).split('.');
+            var fd = (ps[1] + z);
+            var r = fd.substring(0,n); 
+            var rm = fd.substring(n); 
+            if (rm < 5) {
+                return ps[0] + '.' + r;
+            }
+            r*=1; // turn it into a number;
+            r++;
+            if (String(r).length != n) {
+                ps[0]*=1;
+                ps[0]++;
+                r = String(r).substring(1); // chop the end off.
+            }
+            
+            return ps[0] + '.' + r;
+             
+        },
+        
         /**
          * Format a number as US currency
          * @param {Number/String} value The numeric value to format
@@ -12967,7 +13026,7 @@ Roo.util.Format = function(){
             }
             return "$" + whole + sub ;
         },
-
+        
         /**
          * Parse a value into a formatted date using the specified format pattern.
          * @param {Mixed} value The value to format
@@ -13194,10 +13253,10 @@ Roo.util.CSS = function(){
     createStyleSheet : function(cssText, id){
         var ss;
         var head = doc.getElementsByTagName("head")[0];
-        var rules = doc.createElement("style");
-        rules.setAttribute("type", "text/css");
+        var nrules = doc.createElement("style");
+        nrules.setAttribute("type", "text/css");
         if(id){
-            rules.setAttribute("id", id);
+            nrules.setAttribute("id", id);
         }
         if (typeof(cssText) != 'string') {
             // support object maps..
@@ -13219,17 +13278,17 @@ Roo.util.CSS = function(){
        
        
        if(Roo.isIE){
-           head.appendChild(rules);
-           ss = rules.styleSheet;
+           head.appendChild(nrules);
+           ss = nrules.styleSheet;
            ss.cssText = cssText;
        }else{
            try{
-                rules.appendChild(doc.createTextNode(cssText));
+                nrules.appendChild(doc.createTextNode(cssText));
            }catch(e){
-               rules.cssText = cssText; 
+               nrules.cssText = cssText; 
            }
-           head.appendChild(rules);
-           ss = rules.styleSheet ? rules.styleSheet : (rules.sheet || doc.styleSheets[doc.styleSheets.length-1]);
+           head.appendChild(nrules);
+           ss = nrules.styleSheet ? nrules.styleSheet : (nrules.sheet || doc.styleSheets[doc.styleSheets.length-1]);
        }
        this.cacheStyleSheet(ss);
        return ss;
@@ -13270,12 +13329,12 @@ Roo.util.CSS = function(){
    },
 
    // private
-   cacheStyleSheet : function(ss){
+   cacheStyleSheet : function(stylesheet){
        if(!rules){
            rules = {};
        }
        try{// try catch for cross domain access issue
-           var ssRules = ss.cssRules || ss.rules;
+           var ssRules = stylesheet.cssRules || stylesheet.rules;
            for(var j = ssRules.length-1; j >= 0; --j){
                rules[ssRules[j].selectorText] = ssRules[j];
            }