Changeset 7429
- Timestamp:
- 02/23/07 19:51:43 (23 months ago)
- Location:
- trunk/src
- Files:
-
- 2 modified
-
date/format.js (modified) (18 diffs)
-
number.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/date/format.js
r7382 r7429 56 56 case 'G': 57 57 if(l>3){dojo.unimplemented("Era format not implemented");} 58 s = info.eras[dateObject.getFullYear() < 0 ? 1 : 0];58 s = bundle.eras[dateObject.getFullYear() < 0 ? 1 : 0]; 59 59 break; 60 60 case 'y': … … 97 97 var type = (c == "L") ? "standalone" : "format"; 98 98 var prop = ["months",type,width].join("-"); 99 s = info[prop][m];99 s = bundle[prop][m]; 100 100 } 101 101 break; … … 133 133 var type = (c == "c") ? "standalone" : "format"; 134 134 var prop = ["days",type,width].join("-"); 135 s = info[prop][d];135 s = bundle[prop][d]; 136 136 } 137 137 break; 138 138 case 'a': 139 139 var timePeriod = (dateObject.getHours() < 12) ? 'am' : 'pm'; 140 s = info[timePeriod];140 s = bundle[timePeriod]; 141 141 break; 142 142 case 'h': … … 212 212 var locale = dojo.hostenv.normalizeLocale(options.locale); 213 213 var formatLength = options.formatLength || 'full'; 214 var info= dojo.date._getGregorianBundle(locale);214 var bundle = dojo.date._getGregorianBundle(locale); 215 215 var str = []; 216 216 var sauce = dojo.lang.curry(this, formatPattern, dateObject); … … 224 224 } 225 225 if(options.selector != "timeOnly"){ 226 var datePattern = options.datePattern || info["dateFormat-"+formatLength];226 var datePattern = options.datePattern || bundle["dateFormat-"+formatLength]; 227 227 if(datePattern){str.push(_processPattern(datePattern, sauce));} 228 228 } 229 229 if(options.selector != "dateOnly"){ 230 var timePattern = options.timePattern || info["timeFormat-"+formatLength];230 var timePattern = options.timePattern || bundle["timeFormat-"+formatLength]; 231 231 if(timePattern){str.push(_processPattern(timePattern, sauce));} 232 232 } … … 234 234 return result; /*String*/ 235 235 }; 236 237 dojo.date.regexp = function(/*Object?*/options){ 238 // 239 // summary: 240 // Builds the regular needed to parse a localized date 241 // 242 // options: object {selector: string, formatLength: string, datePattern: string, timePattern: string, locale: string, strict: boolean} 243 // selector- choice of timeOnly, dateOnly, dateTime (default: dateOnly) 244 // formatLength- choice of long, short, medium or full (plus any custom additions). Defaults to 'full' 245 // datePattern,timePattern- override pattern with this string 246 // locale- override the locale used to determine formatting rules 247 248 return dojo.date._parseInfo(options).regexp; // String 249 }; 250 251 dojo.date._parseInfo = function(/*Object?*/options){ 252 options = options || {}; 253 var locale = dojo.hostenv.normalizeLocale(options.locale); 254 var bundle = dojo.date._getGregorianBundle(locale); 255 var formatLength = options.formatLength || 'full'; 256 if(!options.selector){ options.selector = 'dateOnly'; } 257 var datePattern = options.datePattern || bundle["dateFormat-" + formatLength]; 258 var timePattern = options.timePattern || bundle["timeFormat-" + formatLength]; 259 var pattern = datePattern; 260 if(options.selector == 'timeOnly'){ 261 pattern = timePattern; 262 }else if(options.selector == 'dateTime'){ 263 pattern = datePattern + ' ' + timePattern; //TODO: use locale-specific pattern to assemble date + time 264 } 265 266 var groups = []; 267 var re = _processPattern(pattern, dojo.lang.curry(this, _buildDateTimeRE, groups, bundle, options)); 268 return {regexp: re, groups: groups, bundle: bundle}; 269 } 236 270 237 271 dojo.date.parse = function(/*String*/value, /*Object?*/options){ … … 263 297 // 264 298 265 options = options || {}; 266 var locale = dojo.hostenv.normalizeLocale(options.locale); 267 var info = dojo.date._getGregorianBundle(locale); 268 var formatLength = options.formatLength || 'full'; 269 if(!options.selector){ options.selector = 'dateOnly'; } 270 var datePattern = options.datePattern || info["dateFormat-" + formatLength]; 271 var timePattern = options.timePattern || info["timeFormat-" + formatLength]; 272 var pattern; 273 if(options.selector == 'dateOnly'){ 274 pattern = datePattern; 275 } 276 else if(options.selector == 'timeOnly'){ 277 pattern = timePattern; 278 }else if(options.selector == 'dateTime'){ 279 pattern = datePattern + ' ' + timePattern; //TODO: use locale-specific pattern to assemble date + time 280 }else{ 281 var msg = "dojo.date.parse: Unknown selector param passed: '" + options.selector + "'."; 282 msg += " Defaulting to date pattern."; 283 dojo.debug(msg); 284 pattern = datePattern; 285 } 286 287 var groups = []; 288 var dateREString = _processPattern(pattern, dojo.lang.curry(this, _buildDateTimeRE, groups, info, options)); 289 var dateRE = new RegExp("^" + dateREString + "$"); 290 291 var match = dateRE.exec(value); 292 if(!match){ 293 return null; 294 } 299 var info = dojo.date._parseInfo(options); 300 var groups = info.groups, bundle = info.bundle; 301 var re = new RegExp("^" + info.regexp + "$");; 302 var match = re.exec(value); 303 if(!match){ return null;} 295 304 296 305 var widthList = ['abbr', 'wide', 'narrow']; … … 341 350 v = v.toLowerCase(); 342 351 } 343 var months = info['months-format-' + widthList[l-3]].concat();352 var months = bundle['months-format-' + widthList[l-3]].concat(); 344 353 for (var j=0; j<months.length; j++){ 345 354 if(!options.strict){ … … 368 377 v = v.toLowerCase(); 369 378 } 370 var days = info['days-format-' + widthList[l-3]].concat();379 var days = bundle['days-format-' + widthList[l-3]].concat(); 371 380 for (var j=0; j<days.length; j++){ 372 381 if(!options.strict){ … … 398 407 break; 399 408 case 'a': //am/pm 400 var am = options.am || info.am;401 var pm = options.pm || info.pm;409 var am = options.am || bundle.am; 410 var pm = options.pm || bundle.pm; 402 411 if(!options.strict){ 403 412 v = v.replace(/\./g,'').toLowerCase(); … … 462 471 //TODO: implement a getWeekday() method in order to test 463 472 //validity of input strings containing 'EEE' or 'EEEE'... 464 465 473 return result; /*Date*/ 466 474 }; … … 490 498 } 491 499 492 function _buildDateTimeRE(groups, info, options, pattern){500 function _buildDateTimeRE(groups, bundle, options, pattern){ 493 501 return pattern.replace(/([a-z])\1*/ig, function(match){ 494 502 // Build a simple regexp without parenthesis, which would ruin the match list … … 498 506 switch(c){ 499 507 case 'y': 500 s = '\\d' + ((l==2) ? '{2,4}' : ' +');508 s = '\\d' + ((l==2) ? '{2,4}' : '{4}'); 501 509 break; 502 510 case 'M': 503 s = (l>2) ? '\\S+' : ' \\d{1,2}';511 s = (l>2) ? '\\S+' : '(?:(?:0*[1-9])|(?:1[0-2]))'; 504 512 break; 505 513 case 'D': … … 507 515 break; 508 516 case 'd': 517 s = '(?:(?:0*[1-9])|(?:[12]\\d)|(?:3[01]))'; 518 break; 509 519 case 'w': 510 520 s = '\\d{1,2}'; … … 513 523 s = '\\S+'; 514 524 break; 515 case 'h': 516 case 'H': 517 case 'K': 518 case 'k': 519 s = '\\d{1,2}'; 525 526 case 'h': //hour (1-12) 527 s = '(?:(?:0*[1-9])|(?:1[0-2]))'; 528 break; 529 case 'k': //hour (0-11) 530 s = '(?:(?:0*\\d)|(?:1[01]))'; 531 break; 532 case 'H': //hour (0-23) 533 s = '(?:(?:0*\\d)|(?:1\\d)|(?:2[0-3]))'; 534 break; 535 case 'K': //hour (1-24) 536 s = '(?:(?:0*[1-9])|(?:1\\d)|(?:2[0-4]))'; 520 537 break; 521 538 case 'm': … … 527 544 break; 528 545 case 'a': 529 var am = options.am || info.am || 'AM';530 var pm = options.pm || info.pm || 'PM';546 var am = options.am || bundle.am || 'AM'; 547 var pm = options.pm || bundle.pm || 'PM'; 531 548 if(options.strict){ 532 549 s = am + '|' + pm; … … 567 584 } 568 585 569 var info= dojo.date._getGregorianBundle(locale);586 var bundle = dojo.date._getGregorianBundle(locale); 570 587 571 588 function $(property){ … … 653 670 case "p": // either `am' or `pm' according to the given time value, 654 671 // or the corresponding strings for the current locale 655 return info[dateObject.getHours() < 12 ? "am" : "pm"];672 return bundle[dateObject.getHours() < 12 ? "am" : "pm"]; 656 673 657 674 case "r": // time in a.m. and p.m. notation -
trunk/src/number.js
r7398 r7429 1 1 dojo.provide("dojo.number"); 2 2 3 dojo.require("dojo.experimental");4 dojo.experimental("dojo.number");5 3 dojo.require("dojo.i18n.common"); 6 4 dojo.requireLocalization("dojo.i18n.cldr", "number");