diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/JSON.js | 63 | ||||
| -rw-r--r-- | src/angular-mocks.js | 2 | ||||
| -rw-r--r-- | src/apis.js | 48 | ||||
| -rw-r--r-- | src/service/filter/filters.js | 2 | 
4 files changed, 58 insertions, 57 deletions
| diff --git a/src/JSON.js b/src/JSON.js index 51a12860..40bdf44f 100644 --- a/src/JSON.js +++ b/src/JSON.js @@ -53,7 +53,7 @@ function fromJson(json, useNative) {    // TODO(misko): remove this once the $http service is checked in.    function transformDates(obj) {      if (isString(obj) && obj.length === DATE_ISOSTRING_LN) { -      return angularString.toDate(obj); +      return jsonStringToDate(obj);      } else if (isArray(obj) || isObject(obj)) {        forEach(obj, function(val, name) {          obj[name] = transformDates(val); @@ -63,8 +63,57 @@ function fromJson(json, useNative) {    }  } -angular.toJson = toJson; -angular.fromJson = fromJson; +var R_ISO8061_STR = /^(\d{4})-(\d\d)-(\d\d)(?:T(\d\d)(?:\:(\d\d)(?:\:(\d\d)(?:\.(\d{3}))?)?)?Z)?$/; +function jsonStringToDate(string){ +  var match; +  if (isString(string) && (match = string.match(R_ISO8061_STR))){ +    var date = new Date(0); +    date.setUTCFullYear(match[1], match[2] - 1, match[3]); +    date.setUTCHours(match[4]||0, match[5]||0, match[6]||0, match[7]||0); +    return date; +  } +  return string; +} + +function jsonDateToString(date){ +  if (!date) return date; +  var isoString = date.toISOString ? date.toISOString() : ''; +  return (isoString.length==24) +    ? isoString +    : padNumber(date.getUTCFullYear(), 4) + '-' + +      padNumber(date.getUTCMonth() + 1, 2) + '-' + +      padNumber(date.getUTCDate(), 2) + 'T' + +      padNumber(date.getUTCHours(), 2) + ':' + +      padNumber(date.getUTCMinutes(), 2) + ':' + +      padNumber(date.getUTCSeconds(), 2) + '.' + +      padNumber(date.getUTCMilliseconds(), 3) + 'Z'; +} + +function quoteUnicode(string) { +    var chars = ['"']; +    for ( var i = 0; i < string.length; i++) { +      var code = string.charCodeAt(i); +      var ch = string.charAt(i); +      switch(ch) { +        case '"': chars.push('\\"'); break; +        case '\\': chars.push('\\\\'); break; +        case '\n': chars.push('\\n'); break; +        case '\f': chars.push('\\f'); break; +        case '\r': chars.push(ch = '\\r'); break; +        case '\t': chars.push(ch = '\\t'); break; +        default: +          if (32 <= code && code <= 126) { +            chars.push(ch); +          } else { +            var encode = "000" + code.toString(16); +            chars.push("\\u" + encode.substring(encode.length - 4)); +          } +      } +    } +    chars.push('"'); +    return chars.join(''); +  } +  function toJsonArray(buf, obj, pretty, stack) {    if (isObject(obj)) { @@ -87,7 +136,7 @@ function toJsonArray(buf, obj, pretty, stack) {    if (obj === null) {      buf.push($null);    } else if (obj instanceof RegExp) { -    buf.push(angularString.quoteUnicode(obj.toString())); +    buf.push(quoteUnicode(obj.toString()));    } else if (isFunction(obj)) {      return;    } else if (isBoolean(obj)) { @@ -99,7 +148,7 @@ function toJsonArray(buf, obj, pretty, stack) {        buf.push('' + obj);      }    } else if (isString(obj)) { -    return buf.push(angularString.quoteUnicode(obj)); +    return buf.push(quoteUnicode(obj));    } else if (isObject(obj)) {      if (isArray(obj)) {        buf.push("["); @@ -120,7 +169,7 @@ function toJsonArray(buf, obj, pretty, stack) {        // TODO(misko): maybe in dev mode have a better error reporting?        buf.push('DOM_ELEMENT');      } else if (isDate(obj)) { -      buf.push(angularString.quoteUnicode(angular.Date.toString(obj))); +      buf.push(quoteUnicode(jsonDateToString(obj)));      } else {        buf.push("{");        if (pretty) buf.push(pretty); @@ -141,7 +190,7 @@ function toJsonArray(buf, obj, pretty, stack) {              buf.push(",");              if (pretty) buf.push(pretty);            } -          buf.push(angularString.quote(key)); +          buf.push(quoteUnicode(key));            buf.push(":");            toJsonArray(buf, value, childPretty, stack);            comma = true; diff --git a/src/angular-mocks.js b/src/angular-mocks.js index 8ce3011d..497fdc58 100644 --- a/src/angular-mocks.js +++ b/src/angular-mocks.js @@ -468,7 +468,7 @@ angular.mock.TzDate = function (offset, timestamp) {    if (angular.isString(timestamp)) {      var tsStr = timestamp; -    this.origDate = angular.String.toDate(timestamp); +    this.origDate = angular.fromJson(angular.toJson({date:timestamp})).date;      timestamp = this.origDate.getTime();      if (isNaN(timestamp)) diff --git a/src/apis.js b/src/apis.js index c23f9a61..db600013 100644 --- a/src/apis.js +++ b/src/apis.js @@ -797,7 +797,6 @@ var angularArray = {    }  }; -var R_ISO8061_STR = /^(\d{4})-(\d\d)-(\d\d)(?:T(\d\d)(?:\:(\d\d)(?:\:(\d\d)(?:\.(\d{3}))?)?)?Z)?$/;  var angularString = {    'quote':function(string) { @@ -809,57 +808,10 @@ var angularString = {                          replace(/\t/g, '\\t').                          replace(/\v/g, '\\v') +               '"'; -  }, -  'quoteUnicode':function(string) { -    var str = angular['String']['quote'](string); -    var chars = []; -    for ( var i = 0; i < str.length; i++) { -      var ch = str.charCodeAt(i); -      if (ch < 128) { -        chars.push(str.charAt(i)); -      } else { -        var encode = "000" + ch.toString(16); -        chars.push("\\u" + encode.substring(encode.length - 4)); -      } -    } -    return chars.join(''); -  }, - -  /** -   * Tries to convert input to date and if successful returns the date, otherwise returns the -   * input. -   * -   * @param {string} string -   * @return {(Date|string)} -   */ -  'toDate':function(string){ -    var match; -    if (isString(string) && (match = string.match(R_ISO8061_STR))){ -      var date = new Date(0); -      date.setUTCFullYear(match[1], match[2] - 1, match[3]); -      date.setUTCHours(match[4]||0, match[5]||0, match[6]||0, match[7]||0); -      return date; -    } -    return string;    }  };  var angularDate = { -    'toString':function(date){ -       if (!date) return date; - -       var isoString = date.toISOString ? date.toISOString() : ''; - -       return (isoString.length==24) ? -                isoString : -                padNumber(date.getUTCFullYear(), 4) + '-' + -                  padNumber(date.getUTCMonth() + 1, 2) + '-' + -                  padNumber(date.getUTCDate(), 2) + 'T' + -                  padNumber(date.getUTCHours(), 2) + ':' + -                  padNumber(date.getUTCMinutes(), 2) + ':' + -                  padNumber(date.getUTCSeconds(), 2) + '.' + -                  padNumber(date.getUTCMilliseconds(), 3) + 'Z'; -    }    };  var angularFunction = { diff --git a/src/service/filter/filters.js b/src/service/filter/filters.js index eea3cbf2..a411bf03 100644 --- a/src/service/filter/filters.js +++ b/src/service/filter/filters.js @@ -359,7 +359,7 @@ function dateFilter($locale) {        if (NUMBER_STRING.test(date)) {          date = parseInt(date, 10);        } else { -        date = angularString.toDate(date); +        date = jsonStringToDate(date);        }      } | 
