????

Your IP : 18.216.31.88


Current Path : C:/inetpub/vhost/bcvt.kontum.gov.vn/www/
Upload File :
Current File : C:/inetpub/vhost/bcvt.kontum.gov.vn/www/15-es2015.js.map

{"version":3,"sources":["webpack:///./node_modules/dojo/cldr/nls/number.js?b13d","./node_modules/dojo/cldr/nls/number.js","./node_modules/dojo/cldr/nls/vi/number.js","./node_modules/dojo/number.js","./node_modules/dojo/regexp.js","./node_modules/dojo/string.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iGAAO,CAAC,mEAAW,EAAE,iJAA+G;AACpI,CAAC,+FAAyB;AAC1B,CAAC,uIAAwH;AACzH,CAAC,mCAAE;AACH,iDAAiD,mBAAmB;AACpE,CAAC;AAAA,oGAAC,C;;;;;;;;;;;ACLF;AACA;AACA;AACA;AACA,mBAAQ,CAAC,SAAS,qIAAqI,8hBAA8hB,ugBAAugB,C;;;;;;;;;;;ACJ5rC,mBAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAEA,C;;;;;;;;;;;ACxBD,iGAAO,oCAAoC,4EAAc,EAAE,gEAAQ,EAAE,2JAA0B,EAAE,oEAAU,EAAE,oEAAU,CAAC,mCACvH;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA,iDAAiD,aAAa,EAAE;AAChE,sDAAsD;AACtD;;AAEA,0DAA0D;AAC1D,kDAAkD;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF,gBAAgB;AAChB,EAAE;AACF,iDAAiD;AACjD,uDAAuD;AACvD,gDAAgD,IAAI;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA,mDAAmD,6EAA6E;AAChI;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,iCAAiC,kBAAkB,iBAAiB;;AAEpE;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF,oBAAoB,kBAAkB;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,OAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF,iBAAiB;AACjB,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,6BAA6B,qEAAqE;AAClG,kDAAkD,yBAAyB;AAC3E,sDAAsD,iCAAiC;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA,sCAAsC,IAAI;AAC1C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf,cAAc;AACd;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA,SAAS,8FAA8F;AACvG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,gCAAgC;AAChC;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B,yBAAyB;AACnD,sCAAsC,qBAAqB;AAC3D,yDAAyD,kCAAkC;AAC3F,4BAA4B,gCAAgC;AAC5D,2BAA2B,+BAA+B;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,SAAS,yCAAyC,uBAAuB,QAAQ;AACjF;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,8BAA8B;AACxD;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA,cAAc,wBAAwB,EAAE;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,aAAa;AAC/B,0BAA0B,kBAAkB;;AAE5C;AACA;AACA;AACA,gCAAgC,mBAAmB,oBAAoB,aAAa,mBAAmB,YAAY;AACnH,+DAA+D,kBAAkB;AACjF;AACA,yBAAyB,kBAAkB,oBAAoB,YAAY;AAC3E,GAAG;AACH;AACA;;AAEA,0BAA0B;AAC1B;;AAEA;AACA,CAAC;AAAA,oGAAC;;;;;;;;;;;;ACnjBF,iGAAO,CAAC,gFAAgB,EAAE,4EAAc,CAAC,mCAAE;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,EAAE,EAAE;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA;AACA,8CAA8C;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;;AAEA;AACA,CAAC;AAAA,oGAAC;;;;;;;;;;;;ACrEF,iGAAO;AACP,CAAC,gFAAgB;AACjB,CAAC,4EAAc;AACf,CAAC,mCAAE;;AAEH;AACA;AACA;AACA;AACA,YAAY;AACZ,WAAW;AACX,WAAW;AACX,aAAa;AACb,aAAa;AACb,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU,WAAW;AACrB;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,WAAW;;AAEjC;AACA,OAAO;AACP;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,IAAI;AAClD,QAAQ,WAAW;AACnB,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,EAAE,+BAA+B,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK,+BAA+B,SAAS;AAC7D,QAAQ,0BAA0B,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE,mBAAmB,EAAE;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,UAAU;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,UAAU;;AAE5D,8BAA8B,SAAS,iBAAiB,OAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG,EAAE;AACL;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,CAAC;AAAA,oGAAC","file":"15-es2015.js","sourcesContent":["define([\"dojo/i18n\", \"C:/Jenkins/workspace/_chinh-vien-thong_web-gis_master/node_modules/dojo-webpack-plugin/loaders/dojo/runner.js\"\n,\"dojo/cldr/nls/vi/number\"\n,\"C:/Jenkins/workspace/_chinh-vien-thong_web-gis_master/node_modules/dojo/cldr/nls/number.js?absMid=dojo/cldr/nls/number\"\n], function(loader, runner) {\n   return runner(loader, \"dojo/cldr/nls/number\", __webpack_require__.dj.c(), false);\n});","/*\n * This module was modified by dojo-webpack-plugin to disable some locales\n * that were excluded by the plugin's 'locales' option\n */\ndefine(({'root':({'scientificFormat':'#E0','currencySpacing-afterCurrency-currencyMatch':'[:^S:]','infinity':'∞','superscriptingExponent':'×','list':';','percentSign':'%','minusSign':'-','currencySpacing-beforeCurrency-surroundingMatch':'[:digit:]','decimalFormat-short':'000T','currencySpacing-afterCurrency-insertBetween':' ','nan':'NaN','plusSign':'+','currencySpacing-afterCurrency-surroundingMatch':'[:digit:]','currencySpacing-beforeCurrency-currencyMatch':'[:^S:]','currencyFormat':'¤ #,##0.00','perMille':'‰','group':',','percentFormat':'#,##0%','decimalFormat-long':'000T','decimalFormat':'#,##0.###','decimal':'.','currencySpacing-beforeCurrency-insertBetween':' ','exponential':'E'}),'ar':false,'bs':false,'ca':false,'cs':false,'da':false,'de':false,'el':false,'en':false,'en-au':false,'es':false,'et':false,'es-mx':false,'fi':false,'fr':false,'fr-ch':false,'he':false,'hi':false,'hr':false,'hu':false,'id':false,'it':false,'ja':false,'ko':false,'mk':false,'lt':false,'lv':false,'nb':false,'nl':false,'pl':false,'pt':false,'pt-pt':false,'ro':false,'ru':false,'sk':false,'sl':false,'sr':false,'sv':false,'th':false,'tr':false,'uk':false,'vi':true,'zh':false,'zh-hant':false,'zh-hk':false,'zh-tw':false}))","define(\n//begin v1.x content\n{\n\t\"scientificFormat\": \"#E0\",\n\t\"infinity\": \"∞\",\n\t\"superscriptingExponent\": \"×\",\n\t\"list\": \";\",\n\t\"percentSign\": \"%\",\n\t\"minusSign\": \"-\",\n\t\"decimalFormat-short\": \"000 NT\",\n\t\"nan\": \"NaN\",\n\t\"plusSign\": \"+\",\n\t\"currencyFormat\": \"#,##0.00 ¤\",\n\t\"perMille\": \"‰\",\n\t\"group\": \".\",\n\t\"percentFormat\": \"#,##0%\",\n\t\"decimalFormat-long\": \"000 nghìn tỷ\",\n\t\"decimalFormat\": \"#,##0.###\",\n\t\"currencyFormat-short\": \"000 NT ¤\",\n\t\"timeSeparator\": \":\",\n\t\"decimal\": \",\",\n\t\"exponential\": \"E\"\n}\n//end v1.x content\n);","define([/*===== \"./_base/declare\", =====*/ \"./_base/lang\", \"./i18n\", \"./i18n!./cldr/nls/number\", \"./string\", \"./regexp\"],\n\tfunction(/*===== declare, =====*/ lang, i18n, nlsNumber, dstring, dregexp){\n\n// module:\n//\t\tdojo/number\n\nvar number = {\n\t// summary:\n\t//\t\tlocalized formatting and parsing routines for Number\n};\nlang.setObject(\"dojo.number\", number);\n\n/*=====\nnumber.__FormatOptions = declare(null, {\n\t// pattern: String?\n\t//\t\toverride [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)\n\t//\t\twith this string.  Default value is based on locale.  Overriding this property will defeat\n\t//\t\tlocalization.  Literal characters in patterns are not supported.\n\t// type: String?\n\t//\t\tchoose a format type based on the locale from the following:\n\t//\t\tdecimal, scientific (not yet supported), percent, currency. decimal by default.\n\t// places: Number?\n\t//\t\tfixed number of decimal places to show.  This overrides any\n\t//\t\tinformation in the provided pattern.\n\t// round: Number?\n\t//\t\t5 rounds to nearest .5; 0 rounds to nearest whole (default). -1\n\t//\t\tmeans do not round.\n\t// locale: String?\n\t//\t\toverride the locale used to determine formatting rules\n\t// fractional: Boolean?\n\t//\t\tIf false, show no decimal places, overriding places and pattern settings.\n});\n=====*/\n\nnumber.format = function(/*Number*/ value, /*number.__FormatOptions?*/ options){\n\t// summary:\n\t//\t\tFormat a Number as a String, using locale-specific settings\n\t// description:\n\t//\t\tCreate a string from a Number using a known localized pattern.\n\t//\t\tFormatting patterns appropriate to the locale are chosen from the\n\t//\t\t[Common Locale Data Repository](http://unicode.org/cldr) as well as the appropriate symbols and\n\t//\t\tdelimiters.\n\t//\t\tIf value is Infinity, -Infinity, or is not a valid JavaScript number, return null.\n\t// value:\n\t//\t\tthe number to be formatted\n\n\toptions = lang.mixin({}, options || {});\n\tvar locale = i18n.normalizeLocale(options.locale),\n\t\tbundle = i18n.getLocalization(\"dojo.cldr\", \"number\", locale);\n\toptions.customs = bundle;\n\tvar pattern = options.pattern || bundle[(options.type || \"decimal\") + \"Format\"];\n\tif(isNaN(value) || Math.abs(value) == Infinity){ return null; } // null\n\treturn number._applyPattern(value, pattern, options); // String\n};\n\n//number._numberPatternRE = /(?:[#0]*,?)*[#0](?:\\.0*#*)?/; // not precise, but good enough\nnumber._numberPatternRE = /[#0,]*[#0](?:\\.0*#*)?/; // not precise, but good enough\n\nnumber._applyPattern = function(/*Number*/ value, /*String*/ pattern, /*number.__FormatOptions?*/ options){\n\t// summary:\n\t//\t\tApply pattern to format value as a string using options. Gives no\n\t//\t\tconsideration to local customs.\n\t// value:\n\t//\t\tthe number to be formatted.\n\t// pattern:\n\t//\t\ta pattern string as described by\n\t//\t\t[unicode.org TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)\n\t// options: number.__FormatOptions?\n\t//\t\t_applyPattern is usually called via `dojo/number.format()` which\n\t//\t\tpopulates an extra property in the options parameter, \"customs\".\n\t//\t\tThe customs object specifies group and decimal parameters if set.\n\n\t//TODO: support escapes\n\toptions = options || {};\n\tvar group = options.customs.group,\n\t\tdecimal = options.customs.decimal,\n\t\tpatternList = pattern.split(';'),\n\t\tpositivePattern = patternList[0];\n\tpattern = patternList[(value < 0) ? 1 : 0] || (\"-\" + positivePattern);\n\n\t//TODO: only test against unescaped\n\tif(pattern.indexOf('%') != -1){\n\t\tvalue *= 100;\n\t}else if(pattern.indexOf('\\u2030') != -1){\n\t\tvalue *= 1000; // per mille\n\t}else if(pattern.indexOf('\\u00a4') != -1){\n\t\tgroup = options.customs.currencyGroup || group;//mixins instead?\n\t\tdecimal = options.customs.currencyDecimal || decimal;// Should these be mixins instead?\n\t\tpattern = pattern.replace(/([\\s\\xa0]*)(\\u00a4{1,3})([\\s\\xa0]*)/, function(match, before, target, after){\n\t\t\tvar prop = [\"symbol\", \"currency\", \"displayName\"][target.length-1],\n\t\t\t\tsymbol = options[prop] || options.currency || \"\";\n\t\t\t// if there is no symbol, also remove surrounding whitespaces\n\t\t\tif(!symbol){\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\treturn before+symbol+after;\n\t\t});\n\t}else if(pattern.indexOf('E') != -1){\n\t\tthrow new Error(\"exponential notation not supported\");\n\t}\n\n\t//TODO: support @ sig figs?\n\tvar numberPatternRE = number._numberPatternRE;\n\tvar numberPattern = positivePattern.match(numberPatternRE);\n\tif(!numberPattern){\n\t\tthrow new Error(\"unable to find a number expression in pattern: \"+pattern);\n\t}\n\tif(options.fractional === false){ options.places = 0; }\n\treturn pattern.replace(numberPatternRE,\n\t\tnumber._formatAbsolute(value, numberPattern[0], {decimal: decimal, group: group, places: options.places, round: options.round}));\n};\n\nnumber.round = function(/*Number*/ value, /*Number?*/ places, /*Number?*/ increment){\n\t// summary:\n\t//\t\tRounds to the nearest value with the given number of decimal places, away from zero\n\t// description:\n\t//\t\tRounds to the nearest value with the given number of decimal places, away from zero if equal.\n\t//\t\tSimilar to Number.toFixed(), but compensates for browser quirks. Rounding can be done by\n\t//\t\tfractional increments also, such as the nearest quarter.\n\t//\t\tNOTE: Subject to floating point errors.  See dojox/math/round for experimental workaround.\n\t// value:\n\t//\t\tThe number to round\n\t// places:\n\t//\t\tThe number of decimal places where rounding takes place.  Defaults to 0 for whole rounding.\n\t//\t\tMust be non-negative.\n\t// increment:\n\t//\t\tRounds next place to nearest value of increment/10.  10 by default.\n\t// example:\n\t// |\t>>> number.round(-0.5)\n\t// |\t-1\n\t// |\t>>> number.round(162.295, 2)\n\t// |\t162.29  // note floating point error.  Should be 162.3\n\t// |\t>>> number.round(10.71, 0, 2.5)\n\t// |\t10.75\n\tvar factor = 10 / (increment || 10);\n\treturn (factor * +value).toFixed(places) / factor; // Number\n};\n\nif((0.9).toFixed() == 0){\n\t// (isIE) toFixed() bug workaround: Rounding fails on IE when most significant digit\n\t// is just after the rounding place and is >=5\n\tvar round = number.round;\n\tnumber.round = function(v, p, m){\n\t\tvar d = Math.pow(10, -p || 0), a = Math.abs(v);\n\t\tif(!v || a >= d){\n\t\t\td = 0;\n\t\t}else{\n\t\t\ta /= d;\n\t\t\tif(a < 0.5 || a >= 0.95){\n\t\t\t\td = 0;\n\t\t\t}\n\t\t}\n\t\treturn round(v, p, m) + (v > 0 ? d : -d);\n\t};\n\n\t// Use \"doc hint\" so the doc parser ignores this new definition of round(), and uses the one above.\n\t/*===== number.round = round; =====*/\n}\n\n/*=====\nnumber.__FormatAbsoluteOptions = declare(null, {\n\t// decimal: String?\n\t//\t\tthe decimal separator\n\t// group: String?\n\t//\t\tthe group separator\n\t// places: Number|String?\n\t//\t\tnumber of decimal places.  the range \"n,m\" will format to m places.\n\t// round: Number?\n\t//\t\t5 rounds to nearest .5; 0 rounds to nearest whole (default). -1\n\t//\t\tmeans don't round.\n});\n=====*/\n\nnumber._formatAbsolute = function(/*Number*/ value, /*String*/ pattern, /*number.__FormatAbsoluteOptions?*/ options){\n\t// summary:\n\t//\t\tApply numeric pattern to absolute value using options. Gives no\n\t//\t\tconsideration to local customs.\n\t// value:\n\t//\t\tthe number to be formatted, ignores sign\n\t// pattern:\n\t//\t\tthe number portion of a pattern (e.g. `#,##0.00`)\n\toptions = options || {};\n\tif(options.places === true){options.places=0;}\n\tif(options.places === Infinity){options.places=6;} // avoid a loop; pick a limit\n\n\tvar patternParts = pattern.split(\".\"),\n\t\tcomma = typeof options.places == \"string\" && options.places.indexOf(\",\"),\n\t\tmaxPlaces = options.places;\n\tif(comma){\n\t\tmaxPlaces = options.places.substring(comma + 1);\n\t}else if(!(maxPlaces >= 0)){\n\t\tmaxPlaces = (patternParts[1] || []).length;\n\t}\n\tif(!(options.round < 0)){\n\t\tvalue = number.round(value, maxPlaces, options.round);\n\t}\n\n\tvar valueParts = String(Math.abs(value)).split(\".\"),\n\t\tfractional = valueParts[1] || \"\";\n\tif(patternParts[1] || options.places){\n\t\tif(comma){\n\t\t\toptions.places = options.places.substring(0, comma);\n\t\t}\n\t\t// Pad fractional with trailing zeros\n\t\tvar pad = options.places !== undefined ? options.places : (patternParts[1] && patternParts[1].lastIndexOf(\"0\") + 1);\n\t\tif(pad > fractional.length){\n\t\t\tvalueParts[1] = dstring.pad(fractional, pad, '0', true);\n\t\t}\n\n\t\t// Truncate fractional\n\t\tif(maxPlaces < fractional.length){\n\t\t\tvalueParts[1] = fractional.substr(0, maxPlaces);\n\t\t}\n\t}else{\n\t\tif(valueParts[1]){ valueParts.pop(); }\n\t}\n\n\t// Pad whole with leading zeros\n\tvar patternDigits = patternParts[0].replace(',', '');\n\tpad = patternDigits.indexOf(\"0\");\n\tif(pad != -1){\n\t\tpad = patternDigits.length - pad;\n\t\tif(pad > valueParts[0].length){\n\t\t\tvalueParts[0] = dstring.pad(valueParts[0], pad);\n\t\t}\n\n\t\t// Truncate whole\n\t\tif(patternDigits.indexOf(\"#\") == -1){\n\t\t\tvalueParts[0] = valueParts[0].substr(valueParts[0].length - pad);\n\t\t}\n\t}\n\n\t// Add group separators\n\tvar index = patternParts[0].lastIndexOf(','),\n\t\tgroupSize, groupSize2;\n\tif(index != -1){\n\t\tgroupSize = patternParts[0].length - index - 1;\n\t\tvar remainder = patternParts[0].substr(0, index);\n\t\tindex = remainder.lastIndexOf(',');\n\t\tif(index != -1){\n\t\t\tgroupSize2 = remainder.length - index - 1;\n\t\t}\n\t}\n\tvar pieces = [];\n\tfor(var whole = valueParts[0]; whole;){\n\t\tvar off = whole.length - groupSize;\n\t\tpieces.push((off > 0) ? whole.substr(off) : whole);\n\t\twhole = (off > 0) ? whole.slice(0, off) : \"\";\n\t\tif(groupSize2){\n\t\t\tgroupSize = groupSize2;\n\t\t\tgroupSize2 = undefined;\n\t\t}\n\t}\n\tvalueParts[0] = pieces.reverse().join(options.group || \",\");\n\n\treturn valueParts.join(options.decimal || \".\");\n};\n\n/*=====\nnumber.__RegexpOptions = declare(null, {\n\t// pattern: String?\n\t//\t\toverride [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)\n\t//\t\twith this string.  Default value is based on locale.  Overriding this property will defeat\n\t//\t\tlocalization.\n\t// type: String?\n\t//\t\tchoose a format type based on the locale from the following:\n\t//\t\tdecimal, scientific (not yet supported), percent, currency. decimal by default.\n\t// locale: String?\n\t//\t\toverride the locale used to determine formatting rules\n\t// strict: Boolean?\n\t//\t\tstrict parsing, false by default.  Strict parsing requires input as produced by the format() method.\n\t//\t\tNon-strict is more permissive, e.g. flexible on white space, omitting thousands separators\n\t// places: Number|String?\n\t//\t\tnumber of decimal places to accept: Infinity, a positive number, or\n\t//\t\ta range \"n,m\".  Defined by pattern or Infinity if pattern not provided.\n});\n=====*/\nnumber.regexp = function(/*number.__RegexpOptions?*/ options){\n\t// summary:\n\t//\t\tBuilds the regular needed to parse a number\n\t// description:\n\t//\t\tReturns regular expression with positive and negative match, group\n\t//\t\tand decimal separators\n\treturn number._parseInfo(options).regexp; // String\n};\n\nnumber._parseInfo = function(/*Object?*/ options){\n\toptions = options || {};\n\tvar locale = i18n.normalizeLocale(options.locale),\n\t\tbundle = i18n.getLocalization(\"dojo.cldr\", \"number\", locale),\n\t\tpattern = options.pattern || bundle[(options.type || \"decimal\") + \"Format\"],\n//TODO: memoize?\n\t\tgroup = bundle.group,\n\t\tdecimal = bundle.decimal,\n\t\tfactor = 1;\n\n\tif(pattern.indexOf('%') != -1){\n\t\tfactor /= 100;\n\t}else if(pattern.indexOf('\\u2030') != -1){\n\t\tfactor /= 1000; // per mille\n\t}else{\n\t\tvar isCurrency = pattern.indexOf('\\u00a4') != -1;\n\t\tif(isCurrency){\n\t\t\tgroup = bundle.currencyGroup || group;\n\t\t\tdecimal = bundle.currencyDecimal || decimal;\n\t\t}\n\t}\n\n\t//TODO: handle quoted escapes\n\tvar patternList = pattern.split(';');\n\tif(patternList.length == 1){\n\t\tpatternList.push(\"-\" + patternList[0]);\n\t}\n\n\tvar re = dregexp.buildGroupRE(patternList, function(pattern){\n\t\tpattern = \"(?:\"+dregexp.escapeString(pattern, '.')+\")\";\n\t\treturn pattern.replace(number._numberPatternRE, function(format){\n\t\t\tvar flags = {\n\t\t\t\tsigned: false,\n\t\t\t\tseparator: options.strict ? group : [group,\"\"],\n\t\t\t\tfractional: options.fractional,\n\t\t\t\tdecimal: decimal,\n\t\t\t\texponent: false\n\t\t\t\t},\n\n\t\t\t\tparts = format.split('.'),\n\t\t\t\tplaces = options.places;\n\n\t\t\t// special condition for percent (factor != 1)\n\t\t\t// allow decimal places even if not specified in pattern\n\t\t\tif(parts.length == 1 && factor != 1){\n\t\t\t    parts[1] = \"###\";\n\t\t\t}\n\t\t\tif(parts.length == 1 || places === 0){\n\t\t\t\tflags.fractional = false;\n\t\t\t}else{\n\t\t\t\tif(places === undefined){ places = options.pattern ? parts[1].lastIndexOf('0') + 1 : Infinity; }\n\t\t\t\tif(places && options.fractional == undefined){flags.fractional = true;} // required fractional, unless otherwise specified\n\t\t\t\tif(!options.places && (places < parts[1].length)){ places += \",\" + parts[1].length; }\n\t\t\t\tflags.places = places;\n\t\t\t}\n\t\t\tvar groups = parts[0].split(',');\n\t\t\tif(groups.length > 1){\n\t\t\t\tflags.groupSize = groups.pop().length;\n\t\t\t\tif(groups.length > 1){\n\t\t\t\t\tflags.groupSize2 = groups.pop().length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn \"(\"+number._realNumberRegexp(flags)+\")\";\n\t\t});\n\t}, true);\n\n\tif(isCurrency){\n\t\t// substitute the currency symbol for the placeholder in the pattern\n\t\tre = re.replace(/([\\s\\xa0]*)(\\u00a4{1,3})([\\s\\xa0]*)/g, function(match, before, target, after){\n\t\t\tvar prop = [\"symbol\", \"currency\", \"displayName\"][target.length-1],\n\t\t\t\tsymbol = dregexp.escapeString(options[prop] || options.currency || \"\");\n\n\t\t\t// if there is no symbol there is no need to take white-spaces into account.\n\t\t\tif(!symbol){\n\t\t\t\treturn \"\";\n\t\t\t}\n\n\t\t\tbefore = before ? \"[\\\\s\\\\xa0]\" : \"\";\n\t\t\tafter = after ? \"[\\\\s\\\\xa0]\" : \"\";\n\t\t\tif(!options.strict){\n\t\t\t\tif(before){before += \"*\";}\n\t\t\t\tif(after){after += \"*\";}\n\t\t\t\treturn \"(?:\"+before+symbol+after+\")?\";\n\t\t\t}\n\t\t\treturn before+symbol+after;\n\t\t});\n\t}\n\n//TODO: substitute localized sign/percent/permille/etc.?\n\n\t// normalize whitespace and return\n\treturn {regexp: re.replace(/[\\xa0 ]/g, \"[\\\\s\\\\xa0]\"), group: group, decimal: decimal, factor: factor}; // Object\n};\n\n/*=====\nnumber.__ParseOptions = declare(null, {\n\t// pattern: String?\n\t//\t\toverride [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)\n\t//\t\twith this string.  Default value is based on locale.  Overriding this property will defeat\n\t//\t\tlocalization.  Literal characters in patterns are not supported.\n\t// type: String?\n\t//\t\tchoose a format type based on the locale from the following:\n\t//\t\tdecimal, scientific (not yet supported), percent, currency. decimal by default.\n\t// locale: String?\n\t//\t\toverride the locale used to determine formatting rules\n\t// strict: Boolean?\n\t//\t\tstrict parsing, false by default.  Strict parsing requires input as produced by the format() method.\n\t//\t\tNon-strict is more permissive, e.g. flexible on white space, omitting thousands separators\n\t// fractional: Boolean|Array?\n\t//\t\tWhether to include the fractional portion, where the number of decimal places are implied by pattern\n\t//\t\tor explicit 'places' parameter.  The value [true,false] makes the fractional portion optional.\n});\n=====*/\nnumber.parse = function(/*String*/ expression, /*number.__ParseOptions?*/ options){\n\t// summary:\n\t//\t\tConvert a properly formatted string to a primitive Number, using\n\t//\t\tlocale-specific settings.\n\t// description:\n\t//\t\tCreate a Number from a string using a known localized pattern.\n\t//\t\tFormatting patterns are chosen appropriate to the locale\n\t//\t\tand follow the syntax described by\n\t//\t\t[unicode.org TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)\n    \t//\t\tNote that literal characters in patterns are not supported.\n\t// expression:\n\t//\t\tA string representation of a Number\n\tvar info = number._parseInfo(options),\n\t\tresults = (new RegExp(\"^\"+info.regexp+\"$\")).exec(expression);\n\tif(!results){\n\t\treturn NaN; //NaN\n\t}\n\tvar absoluteMatch = results[1]; // match for the positive expression\n\tif(!results[1]){\n\t\tif(!results[2]){\n\t\t\treturn NaN; //NaN\n\t\t}\n\t\t// matched the negative pattern\n\t\tabsoluteMatch =results[2];\n\t\tinfo.factor *= -1;\n\t}\n\n\t// Transform it to something Javascript can parse as a number.  Normalize\n\t// decimal point and strip out group separators or alternate forms of whitespace\n\tabsoluteMatch = absoluteMatch.\n\t\treplace(new RegExp(\"[\"+info.group + \"\\\\s\\\\xa0\"+\"]\", \"g\"), \"\").\n\t\treplace(info.decimal, \".\");\n\t// Adjust for negative sign, percent, etc. as necessary\n\treturn absoluteMatch * info.factor; //Number\n};\n\n/*=====\nnumber.__RealNumberRegexpFlags = declare(null, {\n\t// places: Number?\n\t//\t\tThe integer number of decimal places or a range given as \"n,m\".  If\n\t//\t\tnot given, the decimal part is optional and the number of places is\n\t//\t\tunlimited.\n\t// decimal: String?\n\t//\t\tA string for the character used as the decimal point.  Default\n\t//\t\tis \".\".\n\t// fractional: Boolean|Array?\n\t//\t\tWhether decimal places are used.  Can be true, false, or [true,\n\t//\t\tfalse].  Default is [true, false] which means optional.\n\t// exponent: Boolean|Array?\n\t//\t\tExpress in exponential notation.  Can be true, false, or [true,\n\t//\t\tfalse]. Default is [true, false], (i.e. will match if the\n\t//\t\texponential part is present are not).\n\t// eSigned: Boolean|Array?\n\t//\t\tThe leading plus-or-minus sign on the exponent.  Can be true,\n\t//\t\tfalse, or [true, false].  Default is [true, false], (i.e. will\n\t//\t\tmatch if it is signed or unsigned).  flags in regexp.integer can be\n\t//\t\tapplied.\n});\n=====*/\n\nnumber._realNumberRegexp = function(/*__RealNumberRegexpFlags?*/ flags){\n\t// summary:\n\t//\t\tBuilds a regular expression to match a real number in exponential\n\t//\t\tnotation\n\n\t// assign default values to missing parameters\n\tflags = flags || {};\n\t//TODO: use mixin instead?\n\tif(!(\"places\" in flags)){ flags.places = Infinity; }\n\tif(typeof flags.decimal != \"string\"){ flags.decimal = \".\"; }\n\tif(!(\"fractional\" in flags) || /^0/.test(flags.places)){ flags.fractional = [true, false]; }\n\tif(!(\"exponent\" in flags)){ flags.exponent = [true, false]; }\n\tif(!(\"eSigned\" in flags)){ flags.eSigned = [true, false]; }\n\n\tvar integerRE = number._integerRegexp(flags),\n\t\tdecimalRE = dregexp.buildGroupRE(flags.fractional,\n\t\tfunction(q){\n\t\t\tvar re = \"\";\n\t\t\tif(q && (flags.places!==0)){\n\t\t\t\tre = \"\\\\\" + flags.decimal;\n\t\t\t\tif(flags.places == Infinity){\n\t\t\t\t\tre = \"(?:\" + re + \"\\\\d+)?\";\n\t\t\t\t}else{\n\t\t\t\t\tre += \"\\\\d{\" + flags.places + \"}\";\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn re;\n\t\t},\n\t\ttrue\n\t);\n\n\tvar exponentRE = dregexp.buildGroupRE(flags.exponent,\n\t\tfunction(q){\n\t\t\tif(q){ return \"([eE]\" + number._integerRegexp({ signed: flags.eSigned}) + \")\"; }\n\t\t\treturn \"\";\n\t\t}\n\t);\n\n\tvar realRE = integerRE + decimalRE;\n\t// allow for decimals without integers, e.g. .25\n\tif(decimalRE){realRE = \"(?:(?:\"+ realRE + \")|(?:\" + decimalRE + \"))\";}\n\treturn realRE + exponentRE; // String\n};\n\n/*=====\nnumber.__IntegerRegexpFlags = declare(null, {\n\t// signed: Boolean?\n\t//\t\tThe leading plus-or-minus sign. Can be true, false, or `[true,false]`.\n\t//\t\tDefault is `[true, false]`, (i.e. will match if it is signed\n\t//\t\tor unsigned).\n\t// separator: String?\n\t//\t\tThe character used as the thousands separator. Default is no\n\t//\t\tseparator. For more than one symbol use an array, e.g. `[\",\", \"\"]`,\n\t//\t\tmakes ',' optional.\n\t// groupSize: Number?\n\t//\t\tgroup size between separators\n\t// groupSize2: Number?\n\t//\t\tsecond grouping, where separators 2..n have a different interval than the first separator (for India)\n});\n=====*/\n\nnumber._integerRegexp = function(/*number.__IntegerRegexpFlags?*/ flags){\n\t// summary:\n\t//\t\tBuilds a regular expression that matches an integer\n\n\t// assign default values to missing parameters\n\tflags = flags || {};\n\tif(!(\"signed\" in flags)){ flags.signed = [true, false]; }\n\tif(!(\"separator\" in flags)){\n\t\tflags.separator = \"\";\n\t}else if(!(\"groupSize\" in flags)){\n\t\tflags.groupSize = 3;\n\t}\n\n\tvar signRE = dregexp.buildGroupRE(flags.signed,\n\t\tfunction(q){ return q ? \"[-+]\" : \"\"; },\n\t\ttrue\n\t);\n\n\tvar numberRE = dregexp.buildGroupRE(flags.separator,\n\t\tfunction(sep){\n\t\t\tif(!sep){\n\t\t\t\treturn \"(?:\\\\d+)\";\n\t\t\t}\n\n\t\t\tsep = dregexp.escapeString(sep);\n\t\t\tif(sep == \" \"){ sep = \"\\\\s\"; }\n\t\t\telse if(sep == \"\\xa0\"){ sep = \"\\\\s\\\\xa0\"; }\n\n\t\t\tvar grp = flags.groupSize, grp2 = flags.groupSize2;\n\t\t\t//TODO: should we continue to enforce that numbers with separators begin with 1-9?  See #6933\n\t\t\tif(grp2){\n\t\t\t\tvar grp2RE = \"(?:0|[1-9]\\\\d{0,\" + (grp2-1) + \"}(?:[\" + sep + \"]\\\\d{\" + grp2 + \"})*[\" + sep + \"]\\\\d{\" + grp + \"})\";\n\t\t\t\treturn ((grp-grp2) > 0) ? \"(?:\" + grp2RE + \"|(?:0|[1-9]\\\\d{0,\" + (grp-1) + \"}))\" : grp2RE;\n\t\t\t}\n\t\t\treturn \"(?:0|[1-9]\\\\d{0,\" + (grp-1) + \"}(?:[\" + sep + \"]\\\\d{\" + grp + \"})*)\";\n\t\t},\n\t\ttrue\n\t);\n\n\treturn signRE + numberRE; // String\n};\n\nreturn number;\n});\n","define([\"./_base/kernel\", \"./_base/lang\"], function(dojo, lang){\n\n// module:\n//\t\tdojo/regexp\n\nvar regexp = {\n\t// summary:\n\t//\t\tRegular expressions and Builder resources\n};\nlang.setObject(\"dojo.regexp\", regexp);\n\nregexp.escapeString = function(/*String*/str, /*String?*/except){\n\t// summary:\n\t//\t\tAdds escape sequences for special characters in regular expressions\n\t// except:\n\t//\t\ta String with special characters to be left unescaped\n\n\treturn str.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+\\-^])/g, function(ch){\n\t\tif(except && except.indexOf(ch) != -1){\n\t\t\treturn ch;\n\t\t}\n\t\treturn \"\\\\\" + ch;\n\t}); // String\n};\n\nregexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){\n\t// summary:\n\t//\t\tBuilds a regular expression that groups subexpressions\n\t// description:\n\t//\t\tA utility function used by some of the RE generators. The\n\t//\t\tsubexpressions are constructed by the function, re, in the second\n\t//\t\tparameter.  re builds one subexpression for each elem in the array\n\t//\t\ta, in the first parameter. Returns a string for a regular\n\t//\t\texpression that groups all the subexpressions.\n\t// arr:\n\t//\t\tA single value or an array of values.\n\t// re:\n\t//\t\tA function. Takes one parameter and converts it to a regular\n\t//\t\texpression.\n\t// nonCapture:\n\t//\t\tIf true, uses non-capturing match, otherwise matches are retained\n\t//\t\tby regular expression. Defaults to false\n\n\t// case 1: a is a single value.\n\tif(!(arr instanceof Array)){\n\t\treturn re(arr); // String\n\t}\n\n\t// case 2: a is an array\n\tvar b = [];\n\tfor(var i = 0; i < arr.length; i++){\n\t\t// convert each elem to a RE\n\t\tb.push(re(arr[i]));\n\t}\n\n\t // join the REs as alternatives in a RE group.\n\treturn regexp.group(b.join(\"|\"), nonCapture); // String\n};\n\nregexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){\n\t// summary:\n\t//\t\tadds group match to expression\n\t// nonCapture:\n\t//\t\tIf true, uses non-capturing match, otherwise matches are retained\n\t//\t\tby regular expression.\n\treturn \"(\" + (nonCapture ? \"?:\":\"\") + expression + \")\"; // String\n};\n\nreturn regexp;\n});\n","define([\n\t\"./_base/kernel\",\t// kernel.global\n\t\"./_base/lang\"\n], function(kernel, lang){\n\n// module:\n//\t\tdojo/string\nvar ESCAPE_REGEXP = /[&<>'\"\\/]/g;\nvar ESCAPE_MAP = {\n\t'&': '&amp;',\n\t'<': '&lt;',\n\t'>': '&gt;',\n\t'\"': '&quot;',\n\t\"'\": '&#x27;',\n\t'/': '&#x2F;'\n};\nvar string = {\n\t// summary:\n\t//\t\tString utilities for Dojo\n};\nlang.setObject(\"dojo.string\", string);\n\nstring.escape = function(/*String*/str){\n\t// summary:\n\t//\t\tEfficiently escape a string for insertion into HTML (innerHTML or attributes), replacing &, <, >, \", ', and / characters.\n\t// str:\n\t//\t\tthe string to escape\n\tif(!str){ return \"\"; }\n\treturn str.replace(ESCAPE_REGEXP, function(c) {\n\t\treturn ESCAPE_MAP[c];\n\t});\n};\n\nstring.rep = function(/*String*/str, /*Integer*/num){\n\t// summary:\n\t//\t\tEfficiently replicate a string `n` times.\n\t// str:\n\t//\t\tthe string to replicate\n\t// num:\n\t//\t\tnumber of times to replicate the string\n\n\tif(num <= 0 || !str){ return \"\"; }\n\n\tvar buf = [];\n\tfor(;;){\n\t\tif(num & 1){\n\t\t\tbuf.push(str);\n\t\t}\n\t\tif(!(num >>= 1)){ break; }\n\t\tstr += str;\n\t}\n\treturn buf.join(\"\");\t// String\n};\n\nstring.pad = function(/*String*/text, /*Integer*/size, /*String?*/ch, /*Boolean?*/end){\n\t// summary:\n\t//\t\tPad a string to guarantee that it is at least `size` length by\n\t//\t\tfilling with the character `ch` at either the start or end of the\n\t//\t\tstring. Pads at the start, by default.\n\t// text:\n\t//\t\tthe string to pad\n\t// size:\n\t//\t\tlength to provide padding\n\t// ch:\n\t//\t\tcharacter to pad, defaults to '0'\n\t// end:\n\t//\t\tadds padding at the end if true, otherwise pads at start\n\t// example:\n\t//\t|\t// Fill the string to length 10 with \"+\" characters on the right.  Yields \"Dojo++++++\".\n\t//\t|\tstring.pad(\"Dojo\", 10, \"+\", true);\n\n\tif(!ch){\n\t\tch = '0';\n\t}\n\tvar out = String(text),\n\t\tpad = string.rep(ch, Math.ceil((size - out.length) / ch.length));\n\treturn end ? out + pad : pad + out;\t// String\n};\n\nstring.substitute = function(\t/*String*/\t\ttemplate,\n\t\t\t\t\t\t\t\t\t/*Object|Array*/map,\n\t\t\t\t\t\t\t\t\t/*Function?*/\ttransform,\n\t\t\t\t\t\t\t\t\t/*Object?*/\t\tthisObject){\n\t// summary:\n\t//\t\tPerforms parameterized substitutions on a string. Throws an\n\t//\t\texception if any parameter is unmatched.\n\t// template:\n\t//\t\ta string with expressions in the form `${key}` to be replaced or\n\t//\t\t`${key:format}` which specifies a format function. keys are case-sensitive.\n\t//\t\tThe special sequence `${}` can be used escape `$`.\n\t// map:\n\t//\t\thash to search for substitutions\n\t// transform:\n\t//\t\ta function to process all parameters before substitution takes\n\t//\t\tplace, e.g. mylib.encodeXML\n\t// thisObject:\n\t//\t\twhere to look for optional format function; default to the global\n\t//\t\tnamespace\n\t// example:\n\t//\t\tSubstitutes two expressions in a string from an Array or Object\n\t//\t|\t// returns \"File 'foo.html' is not found in directory '/temp'.\"\n\t//\t|\t// by providing substitution data in an Array\n\t//\t|\tstring.substitute(\n\t//\t|\t\t\"File '${0}' is not found in directory '${1}'.\",\n\t//\t|\t\t[\"foo.html\",\"/temp\"]\n\t//\t|\t);\n\t//\t|\n\t//\t|\t// also returns \"File 'foo.html' is not found in directory '/temp'.\"\n\t//\t|\t// but provides substitution data in an Object structure.  Dotted\n\t//\t|\t// notation may be used to traverse the structure.\n\t//\t|\tstring.substitute(\n\t//\t|\t\t\"File '${name}' is not found in directory '${info.dir}'.\",\n\t//\t|\t\t{ name: \"foo.html\", info: { dir: \"/temp\" } }\n\t//\t|\t);\n\t// example:\n\t//\t\tUse a transform function to modify the values:\n\t//\t|\t// returns \"file 'foo.html' is not found in directory '/temp'.\"\n\t//\t|\tstring.substitute(\n\t//\t|\t\t\"${0} is not found in ${1}.\",\n\t//\t|\t\t[\"foo.html\",\"/temp\"],\n\t//\t|\t\tfunction(str){\n\t//\t|\t\t\t// try to figure out the type\n\t//\t|\t\t\tvar prefix = (str.charAt(0) == \"/\") ? \"directory\": \"file\";\n\t//\t|\t\t\treturn prefix + \" '\" + str + \"'\";\n\t//\t|\t\t}\n\t//\t|\t);\n\t// example:\n\t//\t\tUse a formatter\n\t//\t|\t// returns \"thinger -- howdy\"\n\t//\t|\tstring.substitute(\n\t//\t|\t\t\"${0:postfix}\", [\"thinger\"], null, {\n\t//\t|\t\t\tpostfix: function(value, key){\n\t//\t|\t\t\t\treturn value + \" -- howdy\";\n\t//\t|\t\t\t}\n\t//\t|\t\t}\n\t//\t|\t);\n\n\tthisObject = thisObject || kernel.global;\n\ttransform = transform ?\n\t\tlang.hitch(thisObject, transform) : function(v){ return v; };\n\n\treturn template.replace(/\\$\\{([^\\s\\:\\}]*)(?:\\:([^\\s\\:\\}]+))?\\}/g,\n\t\tfunction(match, key, format){\n\t\t\tif (key == ''){\n\t\t\t\treturn '$';\n\t\t\t}\n\t\t\tvar value = lang.getObject(key, false, map);\n\t\t\tif(format){\n\t\t\t\tvalue = lang.getObject(format, false, thisObject).call(thisObject, value, key);\n\t\t\t}\n\t\t\tvar result = transform(value, key);\n\n\t\t\tif (typeof result === 'undefined') {\n\t\t\t\tthrow new Error('string.substitute could not find key \"' + key + '\" in template');\n\t\t\t}\n\n\t\t\treturn result.toString();\n\t\t}); // String\n};\n\nstring.trim = String.prototype.trim ?\n\tlang.trim : // aliasing to the native function\n\tfunction(str){\n\t\tstr = str.replace(/^\\s+/, '');\n\t\tfor(var i = str.length - 1; i >= 0; i--){\n\t\t\tif(/\\S/.test(str.charAt(i))){\n\t\t\t\tstr = str.substring(0, i + 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn str;\n\t};\n\n/*=====\n string.trim = function(str){\n\t // summary:\n\t //\t\tTrims whitespace from both sides of the string\n\t // str: String\n\t //\t\tString to be trimmed\n\t // returns: String\n\t //\t\tReturns the trimmed string\n\t // description:\n\t //\t\tThis version of trim() was taken from [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript).\n\t //\t\tThe short yet performant version of this function is dojo/_base/lang.trim(),\n\t //\t\twhich is part of Dojo base.  Uses String.prototype.trim instead, if available.\n\t return \"\";\t// String\n };\n =====*/\n\n\treturn string;\n});\n"],"sourceRoot":"webpack:///"}