Browse Source

more browser compatability changes

Caolan McMahon 14 years ago
parent
commit
25beb3596b
1 changed files with 30 additions and 6 deletions
  1. 30 6
      commonjs/kanso/querystring.js

+ 30 - 6
commonjs/kanso/querystring.js

@@ -3,8 +3,32 @@
  */
  */
 
 
 // Browser-friendly version of Array.isArray
 // Browser-friendly version of Array.isArray
-var _isArray = function(obj) {
-    return toString.call(obj) === '[object Array]';
+var _isArray = Array.isArray || function (obj) {
+    return Object.prototype.toString.call(obj) === '[object Array]';
+};
+
+// cross-browser map implementation
+var _map = function (obj, iterator, context) {
+    if (obj.map) {
+        return obj.map(iterator, context);
+    }
+    var results = [];
+    var len = obj.length;
+    for (var i = 0; i < len; i += 1) {
+        results[results.length] = iterator.call(context, obj[i], i, obj);
+    }
+    return results;
+};
+
+// cross-browser Object.keys implementation
+var _keys = function (obj) {
+    var keys = [];
+    for (var k in obj) {
+        if (obj.hasOwnProperty(k)) {
+            keys.push(k);
+        }
+    }
+    return keys;
 };
 };
 
 
 // Query String Utilities
 // Query String Utilities
@@ -44,7 +68,7 @@ QueryString.stringify = function (obj, sep, eq, munge, name) {
         return QueryString.escape(name) + eq + QueryString.escape(obj);
         return QueryString.escape(name) + eq + QueryString.escape(obj);
     case '[object Array]':
     case '[object Array]':
         name = name + (munge ? "[]" : "");
         name = name + (munge ? "[]" : "");
-        return obj.map(function (item) {
+        return _map(obj, function (item) {
             return QueryString.stringify(item, sep, eq, munge, name);
             return QueryString.stringify(item, sep, eq, munge, name);
         }).join(sep);
         }).join(sep);
     }
     }
@@ -61,9 +85,9 @@ QueryString.stringify = function (obj, sep, eq, munge, name) {
 
 
     var begin = name ? name + "[" : "",
     var begin = name ? name + "[" : "",
         end = name ? "]" : "",
         end = name ? "]" : "",
-        keys = Object.keys(obj),
+        keys = _keys(obj),
         n,
         n,
-        s = Object.keys(obj).map(function (key) {
+        s = _map(_keys(obj), function (key) {
             n = begin + key + end;
             n = begin + key + end;
             return QueryString.stringify(obj[key], sep, eq, munge, n);
             return QueryString.stringify(obj[key], sep, eq, munge, n);
         }).join(sep);
         }).join(sep);
@@ -91,7 +115,7 @@ QueryString.parse = function (qs, sep, eq) {
     if (qs === undefined) {
     if (qs === undefined) {
         return {};
         return {};
     }
     }
-    String(qs).split(sep || "&").map(function (keyValue) {
+    _map(String(qs).split(sep || "&"), function (keyValue) {
         var res = obj,
         var res = obj,
             next,
             next,
             kv = keyValue.split(eq || "="),
             kv = keyValue.split(eq || "="),