{"version":3,"sources":["webpack:///./node_modules/linq/linq.js","webpack:///./src/api/echartsData/common.js","webpack:///./src/util/date.js"],"names":["Functions","Identity","x","True","Blank","Types","Boolean","Number","String","Object","Undefined","Function","funcCache","Utils","createLambda","expression","f","indexOf","match","regexp","RegExp","maxLength","exec","paramNumber","length","argArray","i","dollar","j","push","args","Array","prototype","join","call","expr","isIEnumerable","obj","Enumerator","e","defineProperty","defineProperties","target","methodName","value","enumerable","configurable","writable","compare","a","b","dispose","hasNativeIteratorSupport","Symbol","iterator","State","Before","Running","After","IEnumerator","initialize","tryGetNext","yielder","Yielder","state","this","current","moveNext","apply","yieldReturn","yieldBreak","Enumerable","getEnumerator","createEnumerable","createEnumerator","extendTo","type","enumerableProto","typeProto","ArrayEnumerable","from","func","recallFrom","getSource","choice","arguments","toArray","Math","floor","random","cycle","index","empty","repeat","charAt","next","done","enumerator","isFirst","atEnd","item","Windows","first","array","key","hasOwnProperty","make","element","matches","input","pattern","flags","source","regex","range","start","count","step","rangeDown","rangeTo","to","take","repeatWithFinalize","initializer","finalizer","generate","toInfinity","toNegativeInfinity","unfold","seed","defer","enumerableFactory","traverseBreadthFirst","resultSelector","nestLevel","buffer","selectMany","any","traverseDepthFirst","enumeratorStack","pop","forEach","s","flatten","middleEnumerator","pairwise","selector","prev","scan","isUseSeed","select","WhereSelectEnumerable","collectionSelector","undefined","middleSeq","where","predicate","WhereEnumerable","choose","result","ofType","typeName","zip","second","firstEnumerator","secondEnumerator","enumerators","concat","takeExceptLast","all","merge","splice","inner","outerKeySelector","innerKeySelector","compareSelector","outerEnumerator","lookup","innerElements","innerCount","toLookup","innerElement","get","groupJoin","isEmpty","insert","isEnumerated","alternate","alternateValueOrSequence","alternateSequence","alternateEnumerator","retVal","contains","defaultIfEmpty","defaultValue","distinct","except","distinctUntilChanged","compareKey","initial","keys","Dictionary","add","intersect","outs","sequenceEqual","union","orderBy","keySelector","comparer","OrderedEnumerable","orderByDescending","reverse","shuffle","weightedSample","weightSelector","sortedByBound","totalWeight","weight","bound","draw","lower","upper","groupBy","elementSelector","toEnumerable","partitionBy","hasResultSelector","group","Grouping","hasNext","aggregate","last","average","sum","max","min","maxBy","minBy","elementAt","found","Error","elementAtOrDefault","firstOrDefault","lastOrDefault","single","singleOrDefault","skip","skipWhile","isSkipEnd","takeWhile","q","shift","takeFromLast","sourceEnumerator","lastIndexOf","cast","asEnumerable","dict","Lookup","toObject","toDictionary","toJSONString","replacer","space","JSON","stringify","toJoinedString","separator","doAction","action","write","document","writeLine","writeln","force","letBind","share","sharedEnumerator","disposed","DisposableEnumerable","memoize","cache","catchError","handler","finallyAction","log","console","trace","message","descending","parent","createOrderedEnumerable","thenBy","thenByDescending","indexes","self","sortContext","SortContext","create","GenerateKeys","sort","child","orderedEnumerable","currentContext","context","len","index1","index2","comparison","prevSource","prevPredicate","composedPredicate","prevSelector","composedSelector","callHasOwnProperty","computeHashCode","toString","HashEntry","EntryList","addLast","entry","replace","newEntry","remove","countField","entryList","buckets","hash","set","clear","currentEntry","dictionary","kvp","groupKey","elements","xInterval","xAxis","retInterval","xmin","xmax","xDiff","xArray","retArray","interval","xAxisDiff","parseInt","minDiff","v","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","k","test","$1","getFullYear","substr","getScheduledDate","time","day","format","Date","setDate","yy","mm","dd","hh","mf","ms"],"mappings":"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","file":"static/js/chunk-7020636d.756f4186.js","sourcesContent":["/*--------------------------------------------------------------------------\r\n * linq.js - LINQ for JavaScript\r\n * licensed under MIT License\r\n *------------------------------------------------------------------------*/\r\n\r\n// ReadOnly Function\r\nvar Functions = {\r\n Identity: function (x) { return x; },\r\n True: function () { return true; },\r\n Blank: function () { }\r\n};\r\n\r\n// const Type\r\nvar Types = {\r\n Boolean: typeof true,\r\n Number: typeof 0,\r\n String: typeof \"\",\r\n Object: typeof {},\r\n Undefined: typeof undefined,\r\n Function: typeof function () { }\r\n};\r\n\r\n// createLambda cache\r\nvar funcCache = { \"\": Functions.Identity };\r\n\r\n// private utility methods\r\nvar Utils = {\r\n // Create anonymous function from lambda expression string\r\n createLambda: function (expression) {\r\n if (expression == null) return Functions.Identity;\r\n if (typeof expression === Types.String) {\r\n // get from cache\r\n var f = funcCache[expression];\r\n if (f != null) {\r\n return f;\r\n }\r\n\r\n if (expression.indexOf(\"=>\") === -1) {\r\n var regexp = new RegExp(\"[$]+\", \"g\");\r\n\r\n var maxLength = 0;\r\n var match;\r\n while ((match = regexp.exec(expression)) != null) {\r\n var paramNumber = match[0].length;\r\n if (paramNumber > maxLength) {\r\n maxLength = paramNumber;\r\n }\r\n }\r\n\r\n var argArray = [];\r\n for (var i = 1; i <= maxLength; i++) {\r\n var dollar = \"\";\r\n for (var j = 0; j < i; j++) {\r\n dollar += \"$\";\r\n }\r\n argArray.push(dollar);\r\n }\r\n\r\n var args = Array.prototype.join.call(argArray, \",\");\r\n\r\n f = new Function(args, \"return \" + expression);\r\n funcCache[expression] = f;\r\n return f;\r\n }\r\n else {\r\n var expr = expression.match(/^[(\\s]*([^()]*?)[)\\s]*=>(.*)/);\r\n f = new Function(expr[1], (expr[2].match(/\\breturn\\b/) ? expr[2] : \"return \" + expr[2]));\r\n funcCache[expression] = f;\r\n return f;\r\n }\r\n }\r\n return expression;\r\n },\r\n\r\n isIEnumerable: function (obj) {\r\n if (typeof Enumerator !== Types.Undefined) {\r\n try {\r\n new Enumerator(obj); // check JScript(IE)'s Enumerator\r\n return true;\r\n }\r\n catch (e) { }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // IE8's defineProperty is defined but cannot use, therefore check defineProperties\r\n defineProperty: (Object.defineProperties != null)\r\n ? function (target, methodName, value) {\r\n Object.defineProperty(target, methodName, {\r\n enumerable: false,\r\n configurable: true,\r\n writable: true,\r\n value: value\r\n })\r\n }\r\n : function (target, methodName, value) {\r\n target[methodName] = value;\r\n },\r\n\r\n compare: function (a, b) {\r\n return (a === b) ? 0\r\n : (a > b) ? 1\r\n : -1;\r\n },\r\n\r\n dispose: function (obj) {\r\n if (obj != null) obj.dispose();\r\n },\r\n\r\n hasNativeIteratorSupport: function () {\r\n return typeof Symbol !== 'undefined' && typeof Symbol.iterator !== 'undefined';\r\n }\r\n};\r\n\r\n// IEnumerator State\r\nvar State = { Before: 0, Running: 1, After: 2 };\r\n\r\n// \"Enumerator\" is conflict JScript's \"Enumerator\"\r\nvar IEnumerator = function (initialize, tryGetNext, dispose) {\r\n var yielder = new Yielder();\r\n var state = State.Before;\r\n\r\n this.current = yielder.current;\r\n\r\n this.moveNext = function () {\r\n try {\r\n switch (state) {\r\n case State.Before:\r\n state = State.Running;\r\n initialize();\r\n // fall through\r\n case State.Running:\r\n if (tryGetNext.apply(yielder)) {\r\n return true;\r\n }\r\n else {\r\n this.dispose();\r\n return false;\r\n }\r\n case State.After:\r\n return false;\r\n }\r\n }\r\n catch (e) {\r\n this.dispose();\r\n throw e;\r\n }\r\n };\r\n\r\n this.dispose = function () {\r\n if (state != State.Running) return;\r\n\r\n try {\r\n dispose();\r\n }\r\n finally {\r\n state = State.After;\r\n }\r\n };\r\n};\r\n\r\n// for tryGetNext\r\nvar Yielder = function () {\r\n var current = null;\r\n this.current = function () { return current; };\r\n this.yieldReturn = function (value) {\r\n current = value;\r\n return true;\r\n };\r\n this.yieldBreak = function () {\r\n return false;\r\n };\r\n};\r\n\r\n// Enumerable constuctor\r\nvar Enumerable = function (getEnumerator) {\r\n this.getEnumerator = getEnumerator;\r\n};\r\n\r\n// Utility\r\n\r\nEnumerable.Utils = {}; // container\r\n\r\nEnumerable.Utils.createLambda = function (expression) {\r\n return Utils.createLambda(expression);\r\n};\r\n\r\nEnumerable.Utils.createEnumerable = function (getEnumerator) {\r\n return new Enumerable(getEnumerator);\r\n};\r\n\r\nEnumerable.Utils.createEnumerator = function (initialize, tryGetNext, dispose) {\r\n return new IEnumerator(initialize, tryGetNext, dispose);\r\n};\r\n\r\nEnumerable.Utils.extendTo = function (type) {\r\n var typeProto = type.prototype;\r\n var enumerableProto;\r\n\r\n if (type === Array) {\r\n enumerableProto = ArrayEnumerable.prototype;\r\n Utils.defineProperty(typeProto, \"getSource\", function () {\r\n return this;\r\n });\r\n }\r\n else {\r\n enumerableProto = Enumerable.prototype;\r\n Utils.defineProperty(typeProto, \"getEnumerator\", function () {\r\n return Enumerable.from(this).getEnumerator();\r\n });\r\n }\r\n\r\n for (var methodName in enumerableProto) {\r\n var func = enumerableProto[methodName];\r\n\r\n // already extended\r\n if (typeProto[methodName] == func) continue;\r\n\r\n // already defined(example Array#reverse/join/forEach...)\r\n if (typeProto[methodName] != null) {\r\n methodName = methodName + \"ByLinq\";\r\n if (typeProto[methodName] == func) continue; // recheck\r\n }\r\n\r\n if (func instanceof Function) {\r\n Utils.defineProperty(typeProto, methodName, func);\r\n }\r\n }\r\n};\r\n\r\nEnumerable.Utils.recallFrom = function (type) {\r\n var typeProto = type.prototype;\r\n var enumerableProto;\r\n\r\n if (type === Array) {\r\n enumerableProto = ArrayEnumerable.prototype;\r\n delete typeProto.getSource;\r\n }\r\n else {\r\n enumerableProto = Enumerable.prototype;\r\n delete typeProto.getEnumerator;\r\n }\r\n\r\n for (var methodName in enumerableProto) {\r\n var func = enumerableProto[methodName];\r\n\r\n if (typeProto[methodName + 'ByLinq']) {\r\n delete typeProto[methodName + 'ByLinq'];\r\n }\r\n else if (typeProto[methodName] == func && func instanceof Function) {\r\n delete typeProto[methodName];\r\n }\r\n }\r\n};\r\n\r\n// Generator\r\n\r\nEnumerable.choice = function () // variable argument\r\n{\r\n var args = arguments;\r\n\r\n return new Enumerable(function () {\r\n return new IEnumerator(\r\n function () {\r\n args = (args[0] instanceof Array) ? args[0]\r\n : (args[0].getEnumerator != null) ? args[0].toArray()\r\n : args;\r\n },\r\n function () {\r\n return this.yieldReturn(args[Math.floor(Math.random() * args.length)]);\r\n },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\nEnumerable.cycle = function () // variable argument\r\n{\r\n var args = arguments;\r\n\r\n return new Enumerable(function () {\r\n var index = 0;\r\n return new IEnumerator(\r\n function () {\r\n args = (args[0] instanceof Array) ? args[0]\r\n : (args[0].getEnumerator != null) ? args[0].toArray()\r\n : args;\r\n },\r\n function () {\r\n if (index >= args.length) index = 0;\r\n return this.yieldReturn(args[index++]);\r\n },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\nEnumerable.empty = function () {\r\n return new Enumerable(function () {\r\n return new IEnumerator(\r\n Functions.Blank,\r\n function () { return false; },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\nEnumerable.from = function (obj) {\r\n if (obj == null) {\r\n return Enumerable.empty();\r\n }\r\n if (obj instanceof Enumerable) {\r\n return obj;\r\n }\r\n if (typeof obj == Types.Number || typeof obj == Types.Boolean) {\r\n return Enumerable.repeat(obj, 1);\r\n }\r\n if (typeof obj == Types.String) {\r\n return new Enumerable(function () {\r\n var index = 0;\r\n return new IEnumerator(\r\n Functions.Blank,\r\n function () {\r\n return (index < obj.length) ? this.yieldReturn(obj.charAt(index++)) : false;\r\n },\r\n Functions.Blank);\r\n });\r\n }\r\n if (typeof obj != Types.Function) {\r\n // array or array like object\r\n if (typeof obj.length == Types.Number) {\r\n return new ArrayEnumerable(obj);\r\n }\r\n\r\n // iterable object\r\n if (typeof Symbol !== 'undefined' && typeof obj[Symbol.iterator] !== 'undefined') {\r\n return new Enumerable(function () {\r\n return new IEnumerator(\r\n Functions.Blank,\r\n function () {\r\n var next = obj.next();\r\n return (next.done ? false : (this.yieldReturn(next.value)));\r\n },\r\n Functions.Blank);\r\n });\r\n }\r\n\r\n // JScript's IEnumerable\r\n if (!(obj instanceof Object) && Utils.isIEnumerable(obj)) {\r\n return new Enumerable(function () {\r\n var isFirst = true;\r\n var enumerator;\r\n return new IEnumerator(\r\n function () { enumerator = new Enumerator(obj); },\r\n function () {\r\n if (isFirst) isFirst = false;\r\n else enumerator.moveNext();\r\n\r\n return (enumerator.atEnd()) ? false : this.yieldReturn(enumerator.item());\r\n },\r\n Functions.Blank);\r\n });\r\n }\r\n\r\n // WinMD IIterable\r\n if (typeof Windows === Types.Object && typeof obj.first === Types.Function) {\r\n return new Enumerable(function () {\r\n var isFirst = true;\r\n var enumerator;\r\n return new IEnumerator(\r\n function () { enumerator = obj.first(); },\r\n function () {\r\n if (isFirst) isFirst = false;\r\n else enumerator.moveNext();\r\n\r\n return (enumerator.hasCurrent) ? this.yieldReturn(enumerator.current) : this.yieldBreak();\r\n },\r\n Functions.Blank);\r\n });\r\n }\r\n }\r\n\r\n // case function/object : Create keyValuePair[]\r\n return new Enumerable(function () {\r\n var array = [];\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () {\r\n for (var key in obj) {\r\n var value = obj[key];\r\n if (!(value instanceof Function) && Object.prototype.hasOwnProperty.call(obj, key)) {\r\n array.push({ key: key, value: value });\r\n }\r\n }\r\n },\r\n function () {\r\n return (index < array.length)\r\n ? this.yieldReturn(array[index++])\r\n : false;\r\n },\r\n Functions.Blank);\r\n });\r\n},\r\n\r\nEnumerable.make = function (element) {\r\n return Enumerable.repeat(element, 1);\r\n};\r\n\r\n// Overload:function(input, pattern)\r\n// Overload:function(input, pattern, flags)\r\nEnumerable.matches = function (input, pattern, flags) {\r\n if (flags == null) flags = \"\";\r\n if (pattern instanceof RegExp) {\r\n flags += (pattern.ignoreCase) ? \"i\" : \"\";\r\n flags += (pattern.multiline) ? \"m\" : \"\";\r\n pattern = pattern.source;\r\n }\r\n if (flags.indexOf(\"g\") === -1) flags += \"g\";\r\n\r\n return new Enumerable(function () {\r\n var regex;\r\n return new IEnumerator(\r\n function () { regex = new RegExp(pattern, flags); },\r\n function () {\r\n var match = regex.exec(input);\r\n return (match) ? this.yieldReturn(match) : false;\r\n },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\n// Overload:function(start, count)\r\n// Overload:function(start, count, step)\r\nEnumerable.range = function (start, count, step) {\r\n if (step == null) step = 1;\r\n\r\n return new Enumerable(function () {\r\n var value;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () { value = start - step; },\r\n function () {\r\n return (index++ < count)\r\n ? this.yieldReturn(value += step)\r\n : this.yieldBreak();\r\n },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\n// Overload:function(start, count)\r\n// Overload:function(start, count, step)\r\nEnumerable.rangeDown = function (start, count, step) {\r\n if (step == null) step = 1;\r\n\r\n return new Enumerable(function () {\r\n var value;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () { value = start + step; },\r\n function () {\r\n return (index++ < count)\r\n ? this.yieldReturn(value -= step)\r\n : this.yieldBreak();\r\n },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\n// Overload:function(start, to)\r\n// Overload:function(start, to, step)\r\nEnumerable.rangeTo = function (start, to, step) {\r\n if (step == null) step = 1;\r\n\r\n if (start < to) {\r\n return new Enumerable(function () {\r\n var value;\r\n\r\n return new IEnumerator(\r\n function () { value = start - step; },\r\n function () {\r\n var next = value += step;\r\n return (next <= to)\r\n ? this.yieldReturn(next)\r\n : this.yieldBreak();\r\n },\r\n Functions.Blank);\r\n });\r\n }\r\n else {\r\n return new Enumerable(function () {\r\n var value;\r\n\r\n return new IEnumerator(\r\n function () { value = start + step; },\r\n function () {\r\n var next = value -= step;\r\n return (next >= to)\r\n ? this.yieldReturn(next)\r\n : this.yieldBreak();\r\n },\r\n Functions.Blank);\r\n });\r\n }\r\n};\r\n\r\n// Overload:function(element)\r\n// Overload:function(element, count)\r\nEnumerable.repeat = function (element, count) {\r\n if (count != null) return Enumerable.repeat(element).take(count);\r\n\r\n return new Enumerable(function () {\r\n return new IEnumerator(\r\n Functions.Blank,\r\n function () { return this.yieldReturn(element); },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\nEnumerable.repeatWithFinalize = function (initializer, finalizer) {\r\n initializer = Utils.createLambda(initializer);\r\n finalizer = Utils.createLambda(finalizer);\r\n\r\n return new Enumerable(function () {\r\n var element;\r\n return new IEnumerator(\r\n function () { element = initializer(); },\r\n function () { return this.yieldReturn(element); },\r\n function () {\r\n if (element != null) {\r\n finalizer(element);\r\n element = null;\r\n }\r\n });\r\n });\r\n};\r\n\r\n// Overload:function(func)\r\n// Overload:function(func, count)\r\nEnumerable.generate = function (func, count) {\r\n if (count != null) return Enumerable.generate(func).take(count);\r\n func = Utils.createLambda(func);\r\n\r\n return new Enumerable(function () {\r\n return new IEnumerator(\r\n Functions.Blank,\r\n function () { return this.yieldReturn(func()); },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(start)\r\n// Overload:function(start, step)\r\nEnumerable.toInfinity = function (start, step) {\r\n if (start == null) start = 0;\r\n if (step == null) step = 1;\r\n\r\n return new Enumerable(function () {\r\n var value;\r\n return new IEnumerator(\r\n function () { value = start - step; },\r\n function () { return this.yieldReturn(value += step); },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(start)\r\n// Overload:function(start, step)\r\nEnumerable.toNegativeInfinity = function (start, step) {\r\n if (start == null) start = 0;\r\n if (step == null) step = 1;\r\n\r\n return new Enumerable(function () {\r\n var value;\r\n return new IEnumerator(\r\n function () { value = start + step; },\r\n function () { return this.yieldReturn(value -= step); },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\nEnumerable.unfold = function (seed, func) {\r\n func = Utils.createLambda(func);\r\n\r\n return new Enumerable(function () {\r\n var isFirst = true;\r\n var value;\r\n return new IEnumerator(\r\n Functions.Blank,\r\n function () {\r\n if (isFirst) {\r\n isFirst = false;\r\n value = seed;\r\n return this.yieldReturn(value);\r\n }\r\n value = func(value);\r\n return this.yieldReturn(value);\r\n },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\nEnumerable.defer = function (enumerableFactory) {\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = Enumerable.from(enumerableFactory()).getEnumerator(); },\r\n function () {\r\n return (enumerator.moveNext())\r\n ? this.yieldReturn(enumerator.current())\r\n : this.yieldBreak();\r\n },\r\n function () {\r\n Utils.dispose(enumerator);\r\n });\r\n });\r\n};\r\n\r\n// Extension Methods\r\n\r\n/* Projection and Filtering Methods */\r\n\r\n// Overload:function(func)\r\n// Overload:function(func, resultSelector)\r\n// Overload:function(func, resultSelector)\r\nEnumerable.prototype.traverseBreadthFirst = function (func, resultSelector) {\r\n var source = this;\r\n func = Utils.createLambda(func);\r\n resultSelector = Utils.createLambda(resultSelector);\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var nestLevel = 0;\r\n var buffer = [];\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n while (true) {\r\n if (enumerator.moveNext()) {\r\n buffer.push(enumerator.current());\r\n return this.yieldReturn(resultSelector(enumerator.current(), nestLevel));\r\n }\r\n\r\n var next = Enumerable.from(buffer).selectMany(function (x) { return func(x); });\r\n if (!next.any()) {\r\n return false;\r\n }\r\n else {\r\n nestLevel++;\r\n buffer = [];\r\n Utils.dispose(enumerator);\r\n enumerator = next.getEnumerator();\r\n }\r\n }\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n// Overload:function(func)\r\n// Overload:function(func, resultSelector)\r\n// Overload:function(func, resultSelector)\r\nEnumerable.prototype.traverseDepthFirst = function (func, resultSelector) {\r\n var source = this;\r\n func = Utils.createLambda(func);\r\n resultSelector = Utils.createLambda(resultSelector);\r\n\r\n return new Enumerable(function () {\r\n var enumeratorStack = [];\r\n var enumerator;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n while (true) {\r\n if (enumerator.moveNext()) {\r\n var value = resultSelector(enumerator.current(), enumeratorStack.length);\r\n enumeratorStack.push(enumerator);\r\n enumerator = Enumerable.from(func(enumerator.current())).getEnumerator();\r\n return this.yieldReturn(value);\r\n }\r\n\r\n if (enumeratorStack.length <= 0) return false;\r\n Utils.dispose(enumerator);\r\n enumerator = enumeratorStack.pop();\r\n }\r\n },\r\n function () {\r\n try {\r\n Utils.dispose(enumerator);\r\n }\r\n finally {\r\n Enumerable.from(enumeratorStack).forEach(function (s) { s.dispose(); });\r\n }\r\n });\r\n });\r\n};\r\n\r\nEnumerable.prototype.flatten = function () {\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var middleEnumerator = null;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n while (true) {\r\n if (middleEnumerator != null) {\r\n if (middleEnumerator.moveNext()) {\r\n return this.yieldReturn(middleEnumerator.current());\r\n }\r\n else {\r\n middleEnumerator = null;\r\n }\r\n }\r\n\r\n if (enumerator.moveNext()) {\r\n if (enumerator.current() instanceof Array) {\r\n Utils.dispose(middleEnumerator);\r\n middleEnumerator = Enumerable.from(enumerator.current())\r\n .selectMany(Functions.Identity)\r\n .flatten()\r\n .getEnumerator();\r\n continue;\r\n }\r\n else {\r\n return this.yieldReturn(enumerator.current());\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n },\r\n function () {\r\n try {\r\n Utils.dispose(enumerator);\r\n }\r\n finally {\r\n Utils.dispose(middleEnumerator);\r\n }\r\n });\r\n });\r\n};\r\n\r\nEnumerable.prototype.pairwise = function (selector) {\r\n var source = this;\r\n selector = Utils.createLambda(selector);\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n\r\n return new IEnumerator(\r\n function () {\r\n enumerator = source.getEnumerator();\r\n enumerator.moveNext();\r\n },\r\n function () {\r\n var prev = enumerator.current();\r\n return (enumerator.moveNext())\r\n ? this.yieldReturn(selector(prev, enumerator.current()))\r\n : false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n// Overload:function(func)\r\n// Overload:function(seed,func)\r\nEnumerable.prototype.scan = function (seed, func) {\r\n var isUseSeed;\r\n if (func == null) {\r\n func = Utils.createLambda(seed); // arguments[0]\r\n isUseSeed = false;\r\n } else {\r\n func = Utils.createLambda(func);\r\n isUseSeed = true;\r\n }\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var value;\r\n var isFirst = true;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n if (isFirst) {\r\n isFirst = false;\r\n if (!isUseSeed) {\r\n if (enumerator.moveNext()) {\r\n return this.yieldReturn(value = enumerator.current());\r\n }\r\n }\r\n else {\r\n return this.yieldReturn(value = seed);\r\n }\r\n }\r\n\r\n return (enumerator.moveNext())\r\n ? this.yieldReturn(value = func(value, enumerator.current()))\r\n : false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n// Overload:function(selector)\r\n// Overload:function(selector)\r\nEnumerable.prototype.select = function (selector) {\r\n selector = Utils.createLambda(selector);\r\n\r\n if (selector.length <= 1) {\r\n return new WhereSelectEnumerable(this, null, selector);\r\n }\r\n else {\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n return (enumerator.moveNext())\r\n ? this.yieldReturn(selector(enumerator.current(), index++))\r\n : false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n }\r\n};\r\n\r\n// Overload:function(collectionSelector)\r\n// Overload:function(collectionSelector)\r\n// Overload:function(collectionSelector,resultSelector)\r\n// Overload:function(collectionSelector,resultSelector)\r\nEnumerable.prototype.selectMany = function (collectionSelector, resultSelector) {\r\n var source = this;\r\n collectionSelector = Utils.createLambda(collectionSelector);\r\n if (resultSelector == null) resultSelector = function (a, b) { return b; };\r\n resultSelector = Utils.createLambda(resultSelector);\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var middleEnumerator = undefined;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n if (middleEnumerator === undefined) {\r\n if (!enumerator.moveNext()) return false;\r\n }\r\n do {\r\n if (middleEnumerator == null) {\r\n var middleSeq = collectionSelector(enumerator.current(), index++);\r\n middleEnumerator = Enumerable.from(middleSeq).getEnumerator();\r\n }\r\n if (middleEnumerator.moveNext()) {\r\n return this.yieldReturn(resultSelector(enumerator.current(), middleEnumerator.current()));\r\n }\r\n Utils.dispose(middleEnumerator);\r\n middleEnumerator = null;\r\n } while (enumerator.moveNext());\r\n return false;\r\n },\r\n function () {\r\n try {\r\n Utils.dispose(enumerator);\r\n }\r\n finally {\r\n Utils.dispose(middleEnumerator);\r\n }\r\n });\r\n });\r\n};\r\n\r\n// Overload:function(predicate)\r\n// Overload:function(predicate)\r\nEnumerable.prototype.where = function (predicate) {\r\n predicate = Utils.createLambda(predicate);\r\n\r\n if (predicate.length <= 1) {\r\n return new WhereEnumerable(this, predicate);\r\n }\r\n else {\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n while (enumerator.moveNext()) {\r\n if (predicate(enumerator.current(), index++)) {\r\n return this.yieldReturn(enumerator.current());\r\n }\r\n }\r\n return false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n }\r\n};\r\n\r\n\r\n// Overload:function(selector)\r\n// Overload:function(selector)\r\nEnumerable.prototype.choose = function (selector) {\r\n selector = Utils.createLambda(selector);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n while (enumerator.moveNext()) {\r\n var result = selector(enumerator.current(), index++);\r\n if (result != null) {\r\n return this.yieldReturn(result);\r\n }\r\n }\r\n return this.yieldBreak();\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\nEnumerable.prototype.ofType = function (type) {\r\n var typeName;\r\n switch (type) {\r\n case Number:\r\n typeName = Types.Number;\r\n break;\r\n case String:\r\n typeName = Types.String;\r\n break;\r\n case Boolean:\r\n typeName = Types.Boolean;\r\n break;\r\n case Function:\r\n typeName = Types.Function;\r\n break;\r\n default:\r\n typeName = null;\r\n break;\r\n }\r\n return (typeName === null)\r\n ? this.where(function (x) { return x instanceof type; })\r\n : this.where(function (x) { return typeof x === typeName; });\r\n};\r\n\r\n// mutiple arguments, last one is selector, others are enumerable\r\nEnumerable.prototype.zip = function () {\r\n var args = arguments;\r\n var selector = Utils.createLambda(arguments[arguments.length - 1]);\r\n\r\n var source = this;\r\n // optimized case:argument is 2\r\n if (arguments.length == 2) {\r\n var second = arguments[0];\r\n\r\n return new Enumerable(function () {\r\n var firstEnumerator;\r\n var secondEnumerator;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () {\r\n firstEnumerator = source.getEnumerator();\r\n secondEnumerator = Enumerable.from(second).getEnumerator();\r\n },\r\n function () {\r\n if (firstEnumerator.moveNext() && secondEnumerator.moveNext()) {\r\n return this.yieldReturn(selector(firstEnumerator.current(), secondEnumerator.current(), index++));\r\n }\r\n return false;\r\n },\r\n function () {\r\n try {\r\n Utils.dispose(firstEnumerator);\r\n } finally {\r\n Utils.dispose(secondEnumerator);\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n return new Enumerable(function () {\r\n var enumerators;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () {\r\n var array = Enumerable.make(source)\r\n .concat(Enumerable.from(args).takeExceptLast().select(Enumerable.from))\r\n .select(function (x) { return x.getEnumerator() })\r\n .toArray();\r\n enumerators = Enumerable.from(array);\r\n },\r\n function () {\r\n if (enumerators.all(function (x) { return x.moveNext() })) {\r\n var array = enumerators\r\n .select(function (x) { return x.current() })\r\n .toArray();\r\n array.push(index++);\r\n return this.yieldReturn(selector.apply(null, array));\r\n }\r\n else {\r\n return this.yieldBreak();\r\n }\r\n },\r\n function () {\r\n Enumerable.from(enumerators).forEach(Utils.dispose);\r\n });\r\n });\r\n }\r\n};\r\n\r\n// mutiple arguments\r\nEnumerable.prototype.merge = function () {\r\n var args = arguments;\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerators;\r\n var index = -1;\r\n\r\n return new IEnumerator(\r\n function () {\r\n enumerators = Enumerable.make(source)\r\n .concat(Enumerable.from(args).select(Enumerable.from))\r\n .select(function (x) { return x.getEnumerator() })\r\n .toArray();\r\n },\r\n function () {\r\n while (enumerators.length > 0) {\r\n index = (index >= enumerators.length - 1) ? 0 : index + 1;\r\n var enumerator = enumerators[index];\r\n\r\n if (enumerator.moveNext()) {\r\n return this.yieldReturn(enumerator.current());\r\n }\r\n else {\r\n enumerator.dispose();\r\n enumerators.splice(index--, 1);\r\n }\r\n }\r\n return this.yieldBreak();\r\n },\r\n function () {\r\n Enumerable.from(enumerators).forEach(Utils.dispose);\r\n });\r\n });\r\n};\r\n\r\n/* Join Methods */\r\n\r\n// Overload:function (inner, outerKeySelector, innerKeySelector, resultSelector)\r\n// Overload:function (inner, outerKeySelector, innerKeySelector, resultSelector, compareSelector)\r\nEnumerable.prototype.join = function (inner, outerKeySelector, innerKeySelector, resultSelector, compareSelector) {\r\n outerKeySelector = Utils.createLambda(outerKeySelector);\r\n innerKeySelector = Utils.createLambda(innerKeySelector);\r\n resultSelector = Utils.createLambda(resultSelector);\r\n compareSelector = Utils.createLambda(compareSelector);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var outerEnumerator;\r\n var lookup;\r\n var innerElements = null;\r\n var innerCount = 0;\r\n\r\n return new IEnumerator(\r\n function () {\r\n outerEnumerator = source.getEnumerator();\r\n lookup = Enumerable.from(inner).toLookup(innerKeySelector, Functions.Identity, compareSelector);\r\n },\r\n function () {\r\n while (true) {\r\n if (innerElements != null) {\r\n var innerElement = innerElements[innerCount++];\r\n if (innerElement !== undefined) {\r\n return this.yieldReturn(resultSelector(outerEnumerator.current(), innerElement));\r\n }\r\n\r\n innerElement = null;\r\n innerCount = 0;\r\n }\r\n\r\n if (outerEnumerator.moveNext()) {\r\n var key = outerKeySelector(outerEnumerator.current());\r\n innerElements = lookup.get(key).toArray();\r\n } else {\r\n return false;\r\n }\r\n }\r\n },\r\n function () { Utils.dispose(outerEnumerator); });\r\n });\r\n};\r\n\r\n// Overload:function (inner, outerKeySelector, innerKeySelector, resultSelector)\r\n// Overload:function (inner, outerKeySelector, innerKeySelector, resultSelector, compareSelector)\r\nEnumerable.prototype.groupJoin = function (inner, outerKeySelector, innerKeySelector, resultSelector, compareSelector) {\r\n outerKeySelector = Utils.createLambda(outerKeySelector);\r\n innerKeySelector = Utils.createLambda(innerKeySelector);\r\n resultSelector = Utils.createLambda(resultSelector);\r\n compareSelector = Utils.createLambda(compareSelector);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator = source.getEnumerator();\r\n var lookup = null;\r\n\r\n return new IEnumerator(\r\n function () {\r\n enumerator = source.getEnumerator();\r\n lookup = Enumerable.from(inner).toLookup(innerKeySelector, Functions.Identity, compareSelector);\r\n },\r\n function () {\r\n if (enumerator.moveNext()) {\r\n var innerElement = lookup.get(outerKeySelector(enumerator.current()));\r\n return this.yieldReturn(resultSelector(enumerator.current(), innerElement));\r\n }\r\n return false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n/* Set Methods */\r\n\r\nEnumerable.prototype.all = function (predicate) {\r\n predicate = Utils.createLambda(predicate);\r\n\r\n var result = true;\r\n this.forEach(function (x) {\r\n if (!predicate(x)) {\r\n result = false;\r\n return false; // break\r\n }\r\n });\r\n return result;\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(predicate)\r\nEnumerable.prototype.any = function (predicate) {\r\n predicate = Utils.createLambda(predicate);\r\n\r\n var enumerator = this.getEnumerator();\r\n try {\r\n if (arguments.length == 0) return enumerator.moveNext(); // case:function()\r\n\r\n while (enumerator.moveNext()) // case:function(predicate)\r\n {\r\n if (predicate(enumerator.current())) return true;\r\n }\r\n return false;\r\n }\r\n finally {\r\n Utils.dispose(enumerator);\r\n }\r\n};\r\n\r\nEnumerable.prototype.isEmpty = function () {\r\n return !this.any();\r\n};\r\n\r\n// multiple arguments\r\nEnumerable.prototype.concat = function () {\r\n var source = this;\r\n\r\n if (arguments.length == 1) {\r\n var second = arguments[0];\r\n\r\n return new Enumerable(function () {\r\n var firstEnumerator;\r\n var secondEnumerator;\r\n\r\n return new IEnumerator(\r\n function () { firstEnumerator = source.getEnumerator(); },\r\n function () {\r\n if (secondEnumerator == null) {\r\n if (firstEnumerator.moveNext()) return this.yieldReturn(firstEnumerator.current());\r\n secondEnumerator = Enumerable.from(second).getEnumerator();\r\n }\r\n if (secondEnumerator.moveNext()) return this.yieldReturn(secondEnumerator.current());\r\n return false;\r\n },\r\n function () {\r\n try {\r\n Utils.dispose(firstEnumerator);\r\n }\r\n finally {\r\n Utils.dispose(secondEnumerator);\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n var args = arguments;\r\n\r\n return new Enumerable(function () {\r\n var enumerators;\r\n\r\n return new IEnumerator(\r\n function () {\r\n enumerators = Enumerable.make(source)\r\n .concat(Enumerable.from(args).select(Enumerable.from))\r\n .select(function (x) { return x.getEnumerator() })\r\n .toArray();\r\n },\r\n function () {\r\n while (enumerators.length > 0) {\r\n var enumerator = enumerators[0];\r\n\r\n if (enumerator.moveNext()) {\r\n return this.yieldReturn(enumerator.current());\r\n }\r\n else {\r\n enumerator.dispose();\r\n enumerators.splice(0, 1);\r\n }\r\n }\r\n return this.yieldBreak();\r\n },\r\n function () {\r\n Enumerable.from(enumerators).forEach(Utils.dispose);\r\n });\r\n });\r\n }\r\n};\r\n\r\nEnumerable.prototype.insert = function (index, second) {\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var firstEnumerator;\r\n var secondEnumerator;\r\n var count = 0;\r\n var isEnumerated = false;\r\n\r\n return new IEnumerator(\r\n function () {\r\n firstEnumerator = source.getEnumerator();\r\n secondEnumerator = Enumerable.from(second).getEnumerator();\r\n },\r\n function () {\r\n if (count == index && secondEnumerator.moveNext()) {\r\n isEnumerated = true;\r\n return this.yieldReturn(secondEnumerator.current());\r\n }\r\n if (firstEnumerator.moveNext()) {\r\n count++;\r\n return this.yieldReturn(firstEnumerator.current());\r\n }\r\n if (!isEnumerated && secondEnumerator.moveNext()) {\r\n return this.yieldReturn(secondEnumerator.current());\r\n }\r\n return false;\r\n },\r\n function () {\r\n try {\r\n Utils.dispose(firstEnumerator);\r\n }\r\n finally {\r\n Utils.dispose(secondEnumerator);\r\n }\r\n });\r\n });\r\n};\r\n\r\nEnumerable.prototype.alternate = function (alternateValueOrSequence) {\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var buffer;\r\n var enumerator;\r\n var alternateSequence;\r\n var alternateEnumerator;\r\n\r\n return new IEnumerator(\r\n function () {\r\n if (alternateValueOrSequence instanceof Array || alternateValueOrSequence.getEnumerator != null) {\r\n alternateSequence = Enumerable.from(Enumerable.from(alternateValueOrSequence).toArray()); // freeze\r\n }\r\n else {\r\n alternateSequence = Enumerable.make(alternateValueOrSequence);\r\n }\r\n enumerator = source.getEnumerator();\r\n if (enumerator.moveNext()) buffer = enumerator.current();\r\n },\r\n function () {\r\n while (true) {\r\n if (alternateEnumerator != null) {\r\n if (alternateEnumerator.moveNext()) {\r\n return this.yieldReturn(alternateEnumerator.current());\r\n }\r\n else {\r\n alternateEnumerator = null;\r\n }\r\n }\r\n\r\n if (buffer == null && enumerator.moveNext()) {\r\n buffer = enumerator.current(); // hasNext\r\n alternateEnumerator = alternateSequence.getEnumerator();\r\n continue; // GOTO\r\n }\r\n else if (buffer != null) {\r\n var retVal = buffer;\r\n buffer = null;\r\n return this.yieldReturn(retVal);\r\n }\r\n\r\n return this.yieldBreak();\r\n }\r\n },\r\n function () {\r\n try {\r\n Utils.dispose(enumerator);\r\n }\r\n finally {\r\n Utils.dispose(alternateEnumerator);\r\n }\r\n });\r\n });\r\n};\r\n\r\n// Overload:function(value)\r\n// Overload:function(value, compareSelector)\r\nEnumerable.prototype.contains = function (value, compareSelector) {\r\n compareSelector = Utils.createLambda(compareSelector);\r\n var enumerator = this.getEnumerator();\r\n try {\r\n while (enumerator.moveNext()) {\r\n if (compareSelector(enumerator.current()) === value) return true;\r\n }\r\n return false;\r\n }\r\n finally {\r\n Utils.dispose(enumerator);\r\n }\r\n};\r\n\r\nEnumerable.prototype.defaultIfEmpty = function (defaultValue) {\r\n var source = this;\r\n if (defaultValue === undefined) defaultValue = null;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var isFirst = true;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n if (enumerator.moveNext()) {\r\n isFirst = false;\r\n return this.yieldReturn(enumerator.current());\r\n }\r\n else if (isFirst) {\r\n isFirst = false;\r\n return this.yieldReturn(defaultValue);\r\n }\r\n return false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(compareSelector)\r\nEnumerable.prototype.distinct = function (compareSelector) {\r\n return this.except(Enumerable.empty(), compareSelector);\r\n};\r\n\r\nEnumerable.prototype.distinctUntilChanged = function (compareSelector) {\r\n compareSelector = Utils.createLambda(compareSelector);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var compareKey;\r\n var initial;\r\n\r\n return new IEnumerator(\r\n function () {\r\n enumerator = source.getEnumerator();\r\n },\r\n function () {\r\n while (enumerator.moveNext()) {\r\n var key = compareSelector(enumerator.current());\r\n\r\n if (initial) {\r\n initial = false;\r\n compareKey = key;\r\n return this.yieldReturn(enumerator.current());\r\n }\r\n\r\n if (compareKey === key) {\r\n continue;\r\n }\r\n\r\n compareKey = key;\r\n return this.yieldReturn(enumerator.current());\r\n }\r\n return this.yieldBreak();\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n// Overload:function(second)\r\n// Overload:function(second, compareSelector)\r\nEnumerable.prototype.except = function (second, compareSelector) {\r\n compareSelector = Utils.createLambda(compareSelector);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var keys;\r\n\r\n return new IEnumerator(\r\n function () {\r\n enumerator = source.getEnumerator();\r\n keys = new Dictionary(compareSelector);\r\n Enumerable.from(second).forEach(function (key) { keys.add(key); });\r\n },\r\n function () {\r\n while (enumerator.moveNext()) {\r\n var current = enumerator.current();\r\n if (!keys.contains(current)) {\r\n keys.add(current);\r\n return this.yieldReturn(current);\r\n }\r\n }\r\n return false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n// Overload:function(second)\r\n// Overload:function(second, compareSelector)\r\nEnumerable.prototype.intersect = function (second, compareSelector) {\r\n compareSelector = Utils.createLambda(compareSelector);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var keys;\r\n var outs;\r\n\r\n return new IEnumerator(\r\n function () {\r\n enumerator = source.getEnumerator();\r\n\r\n keys = new Dictionary(compareSelector);\r\n Enumerable.from(second).forEach(function (key) { keys.add(key); });\r\n outs = new Dictionary(compareSelector);\r\n },\r\n function () {\r\n while (enumerator.moveNext()) {\r\n var current = enumerator.current();\r\n if (!outs.contains(current) && keys.contains(current)) {\r\n outs.add(current);\r\n return this.yieldReturn(current);\r\n }\r\n }\r\n return false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n// Overload:function(second)\r\n// Overload:function(second, compareSelector)\r\nEnumerable.prototype.sequenceEqual = function (second, compareSelector) {\r\n compareSelector = Utils.createLambda(compareSelector);\r\n\r\n var firstEnumerator = this.getEnumerator();\r\n try {\r\n var secondEnumerator = Enumerable.from(second).getEnumerator();\r\n try {\r\n while (firstEnumerator.moveNext()) {\r\n if (!secondEnumerator.moveNext()\r\n || compareSelector(firstEnumerator.current()) !== compareSelector(secondEnumerator.current())) {\r\n return false;\r\n }\r\n }\r\n\r\n if (secondEnumerator.moveNext()) return false;\r\n return true;\r\n }\r\n finally {\r\n Utils.dispose(secondEnumerator);\r\n }\r\n }\r\n finally {\r\n Utils.dispose(firstEnumerator);\r\n }\r\n};\r\n\r\nEnumerable.prototype.union = function (second, compareSelector) {\r\n compareSelector = Utils.createLambda(compareSelector);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var firstEnumerator;\r\n var secondEnumerator;\r\n var keys;\r\n\r\n return new IEnumerator(\r\n function () {\r\n firstEnumerator = source.getEnumerator();\r\n keys = new Dictionary(compareSelector);\r\n },\r\n function () {\r\n var current;\r\n if (secondEnumerator === undefined) {\r\n while (firstEnumerator.moveNext()) {\r\n current = firstEnumerator.current();\r\n if (!keys.contains(current)) {\r\n keys.add(current);\r\n return this.yieldReturn(current);\r\n }\r\n }\r\n secondEnumerator = Enumerable.from(second).getEnumerator();\r\n }\r\n while (secondEnumerator.moveNext()) {\r\n current = secondEnumerator.current();\r\n if (!keys.contains(current)) {\r\n keys.add(current);\r\n return this.yieldReturn(current);\r\n }\r\n }\r\n return false;\r\n },\r\n function () {\r\n try {\r\n Utils.dispose(firstEnumerator);\r\n }\r\n finally {\r\n Utils.dispose(secondEnumerator);\r\n }\r\n });\r\n });\r\n};\r\n\r\n/* Ordering Methods */\r\n\r\nEnumerable.prototype.orderBy = function (keySelector, comparer) {\r\n return new OrderedEnumerable(this, keySelector, comparer, false);\r\n};\r\n\r\nEnumerable.prototype.orderByDescending = function (keySelector, comparer) {\r\n return new OrderedEnumerable(this, keySelector, comparer, true);\r\n};\r\n\r\nEnumerable.prototype.reverse = function () {\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var buffer;\r\n var index;\r\n\r\n return new IEnumerator(\r\n function () {\r\n buffer = source.toArray();\r\n index = buffer.length;\r\n },\r\n function () {\r\n return (index > 0)\r\n ? this.yieldReturn(buffer[--index])\r\n : false;\r\n },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\nEnumerable.prototype.shuffle = function () {\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var buffer;\r\n\r\n return new IEnumerator(\r\n function () { buffer = source.toArray(); },\r\n function () {\r\n if (buffer.length > 0) {\r\n var i = Math.floor(Math.random() * buffer.length);\r\n return this.yieldReturn(buffer.splice(i, 1)[0]);\r\n }\r\n return false;\r\n },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\nEnumerable.prototype.weightedSample = function (weightSelector) {\r\n weightSelector = Utils.createLambda(weightSelector);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var sortedByBound;\r\n var totalWeight = 0;\r\n\r\n return new IEnumerator(\r\n function () {\r\n sortedByBound = source\r\n .choose(function (x) {\r\n var weight = weightSelector(x);\r\n if (weight <= 0) return null; // ignore 0\r\n\r\n totalWeight += weight;\r\n return { value: x, bound: totalWeight };\r\n })\r\n .toArray();\r\n },\r\n function () {\r\n if (sortedByBound.length > 0) {\r\n var draw = Math.floor(Math.random() * totalWeight) + 1;\r\n\r\n var lower = -1;\r\n var upper = sortedByBound.length;\r\n while (upper - lower > 1) {\r\n var index = Math.floor((lower + upper) / 2);\r\n if (sortedByBound[index].bound >= draw) {\r\n upper = index;\r\n }\r\n else {\r\n lower = index;\r\n }\r\n }\r\n\r\n return this.yieldReturn(sortedByBound[upper].value);\r\n }\r\n\r\n return this.yieldBreak();\r\n },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\n/* Grouping Methods */\r\n\r\n// Overload:function(keySelector)\r\n// Overload:function(keySelector,elementSelector)\r\n// Overload:function(keySelector,elementSelector,resultSelector)\r\n// Overload:function(keySelector,elementSelector,resultSelector,compareSelector)\r\nEnumerable.prototype.groupBy = function (keySelector, elementSelector, resultSelector, compareSelector) {\r\n var source = this;\r\n keySelector = Utils.createLambda(keySelector);\r\n elementSelector = Utils.createLambda(elementSelector);\r\n if (resultSelector != null) resultSelector = Utils.createLambda(resultSelector);\r\n compareSelector = Utils.createLambda(compareSelector);\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n\r\n return new IEnumerator(\r\n function () {\r\n enumerator = source.toLookup(keySelector, elementSelector, compareSelector)\r\n .toEnumerable()\r\n .getEnumerator();\r\n },\r\n function () {\r\n while (enumerator.moveNext()) {\r\n return (resultSelector == null)\r\n ? this.yieldReturn(enumerator.current())\r\n : this.yieldReturn(resultSelector(enumerator.current().key(), enumerator.current()));\r\n }\r\n return false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n// Overload:function(keySelector)\r\n// Overload:function(keySelector,elementSelector)\r\n// Overload:function(keySelector,elementSelector,resultSelector)\r\n// Overload:function(keySelector,elementSelector,resultSelector,compareSelector)\r\nEnumerable.prototype.partitionBy = function (keySelector, elementSelector, resultSelector, compareSelector) {\r\n\r\n var source = this;\r\n keySelector = Utils.createLambda(keySelector);\r\n elementSelector = Utils.createLambda(elementSelector);\r\n compareSelector = Utils.createLambda(compareSelector);\r\n var hasResultSelector;\r\n if (resultSelector == null) {\r\n hasResultSelector = false;\r\n resultSelector = function (key, group) { return new Grouping(key, group); };\r\n }\r\n else {\r\n hasResultSelector = true;\r\n resultSelector = Utils.createLambda(resultSelector);\r\n }\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var key;\r\n var compareKey;\r\n var group = [];\r\n\r\n return new IEnumerator(\r\n function () {\r\n enumerator = source.getEnumerator();\r\n if (enumerator.moveNext()) {\r\n key = keySelector(enumerator.current());\r\n compareKey = compareSelector(key);\r\n group.push(elementSelector(enumerator.current()));\r\n }\r\n },\r\n function () {\r\n var hasNext;\r\n while ((hasNext = enumerator.moveNext()) == true) {\r\n if (compareKey === compareSelector(keySelector(enumerator.current()))) {\r\n group.push(elementSelector(enumerator.current()));\r\n }\r\n else break;\r\n }\r\n\r\n if (group.length > 0) {\r\n var result = (hasResultSelector)\r\n ? resultSelector(key, Enumerable.from(group))\r\n : resultSelector(key, group);\r\n if (hasNext) {\r\n key = keySelector(enumerator.current());\r\n compareKey = compareSelector(key);\r\n group = [elementSelector(enumerator.current())];\r\n }\r\n else group = [];\r\n\r\n return this.yieldReturn(result);\r\n }\r\n\r\n return false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\nEnumerable.prototype.buffer = function (count) {\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n var array = [];\r\n var index = 0;\r\n while (enumerator.moveNext()) {\r\n array.push(enumerator.current());\r\n if (++index >= count) return this.yieldReturn(array);\r\n }\r\n if (array.length > 0) return this.yieldReturn(array);\r\n return false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n/* Aggregate Methods */\r\n\r\n// Overload:function(func)\r\n// Overload:function(seed,func)\r\n// Overload:function(seed,func,resultSelector)\r\nEnumerable.prototype.aggregate = function (seed, func, resultSelector) {\r\n resultSelector = Utils.createLambda(resultSelector);\r\n return resultSelector(this.scan(seed, func, resultSelector).last());\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(selector)\r\nEnumerable.prototype.average = function (selector) {\r\n selector = Utils.createLambda(selector);\r\n\r\n var sum = 0;\r\n var count = 0;\r\n this.forEach(function (x) {\r\n sum += selector(x);\r\n ++count;\r\n });\r\n\r\n return sum / count;\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(predicate)\r\nEnumerable.prototype.count = function (predicate) {\r\n predicate = (predicate == null) ? Functions.True : Utils.createLambda(predicate);\r\n\r\n var count = 0;\r\n this.forEach(function (x, i) {\r\n if (predicate(x, i))++count;\r\n });\r\n return count;\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(selector)\r\nEnumerable.prototype.max = function (selector) {\r\n if (selector == null) selector = Functions.Identity;\r\n return this.select(selector).aggregate(function (a, b) { return (a > b) ? a : b; });\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(selector)\r\nEnumerable.prototype.min = function (selector) {\r\n if (selector == null) selector = Functions.Identity;\r\n return this.select(selector).aggregate(function (a, b) { return (a < b) ? a : b; });\r\n};\r\n\r\nEnumerable.prototype.maxBy = function (keySelector) {\r\n keySelector = Utils.createLambda(keySelector);\r\n return this.aggregate(function (a, b) { return (keySelector(a) > keySelector(b)) ? a : b; });\r\n};\r\n\r\nEnumerable.prototype.minBy = function (keySelector) {\r\n keySelector = Utils.createLambda(keySelector);\r\n return this.aggregate(function (a, b) { return (keySelector(a) < keySelector(b)) ? a : b; });\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(selector)\r\nEnumerable.prototype.sum = function (selector) {\r\n if (selector == null) selector = Functions.Identity;\r\n return this.select(selector).aggregate(0, function (a, b) { return a + b; });\r\n};\r\n\r\n/* Paging Methods */\r\n\r\nEnumerable.prototype.elementAt = function (index) {\r\n var value;\r\n var found = false;\r\n this.forEach(function (x, i) {\r\n if (i == index) {\r\n value = x;\r\n found = true;\r\n return false;\r\n }\r\n });\r\n\r\n if (!found) throw new Error(\"index is less than 0 or greater than or equal to the number of elements in source.\");\r\n return value;\r\n};\r\n\r\nEnumerable.prototype.elementAtOrDefault = function (index, defaultValue) {\r\n if (defaultValue === undefined) defaultValue = null;\r\n var value;\r\n var found = false;\r\n this.forEach(function (x, i) {\r\n if (i == index) {\r\n value = x;\r\n found = true;\r\n return false;\r\n }\r\n });\r\n\r\n return (!found) ? defaultValue : value;\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(predicate)\r\nEnumerable.prototype.first = function (predicate) {\r\n if (predicate != null) return this.where(predicate).first();\r\n\r\n var value;\r\n var found = false;\r\n this.forEach(function (x) {\r\n value = x;\r\n found = true;\r\n return false;\r\n });\r\n\r\n if (!found) throw new Error(\"first:No element satisfies the condition.\");\r\n return value;\r\n};\r\n\r\nEnumerable.prototype.firstOrDefault = function (predicate, defaultValue) {\r\n if (predicate !== undefined) {\r\n if (typeof predicate === Types.Function || typeof Utils.createLambda(predicate) === Types.Function) {\r\n return this.where(predicate).firstOrDefault(undefined, defaultValue);\r\n }\r\n defaultValue = predicate;\r\n }\r\n\r\n var value;\r\n var found = false;\r\n this.forEach(function (x) {\r\n value = x;\r\n found = true;\r\n return false;\r\n });\r\n return (!found) ? defaultValue : value;\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(predicate)\r\nEnumerable.prototype.last = function (predicate) {\r\n if (predicate != null) return this.where(predicate).last();\r\n\r\n var value;\r\n var found = false;\r\n this.forEach(function (x) {\r\n found = true;\r\n value = x;\r\n });\r\n\r\n if (!found) throw new Error(\"last:No element satisfies the condition.\");\r\n return value;\r\n};\r\n\r\nEnumerable.prototype.lastOrDefault = function (predicate, defaultValue) {\r\n if (predicate !== undefined) {\r\n if (typeof predicate === Types.Function || typeof Utils.createLambda(predicate) === Types.Function) {\r\n return this.where(predicate).lastOrDefault(undefined, defaultValue);\r\n }\r\n defaultValue = predicate;\r\n }\r\n\r\n var value;\r\n var found = false;\r\n this.forEach(function (x) {\r\n found = true;\r\n value = x;\r\n });\r\n return (!found) ? defaultValue : value;\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(predicate)\r\nEnumerable.prototype.single = function (predicate) {\r\n if (predicate != null) return this.where(predicate).single();\r\n\r\n var value;\r\n var found = false;\r\n this.forEach(function (x) {\r\n if (!found) {\r\n found = true;\r\n value = x;\r\n } else throw new Error(\"single:sequence contains more than one element.\");\r\n });\r\n\r\n if (!found) throw new Error(\"single:No element satisfies the condition.\");\r\n return value;\r\n};\r\n\r\n// Overload:function(defaultValue)\r\n// Overload:function(defaultValue,predicate)\r\nEnumerable.prototype.singleOrDefault = function (predicate, defaultValue) {\r\n if (defaultValue === undefined) defaultValue = null;\r\n if (predicate != null) return this.where(predicate).singleOrDefault(null, defaultValue);\r\n\r\n var value;\r\n var found = false;\r\n this.forEach(function (x) {\r\n if (!found) {\r\n found = true;\r\n value = x;\r\n } else throw new Error(\"single:sequence contains more than one element.\");\r\n });\r\n\r\n return (!found) ? defaultValue : value;\r\n};\r\n\r\nEnumerable.prototype.skip = function (count) {\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () {\r\n enumerator = source.getEnumerator();\r\n while (index++ < count && enumerator.moveNext()) {\r\n }\r\n ;\r\n },\r\n function () {\r\n return (enumerator.moveNext())\r\n ? this.yieldReturn(enumerator.current())\r\n : false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n// Overload:function(predicate)\r\n// Overload:function(predicate)\r\nEnumerable.prototype.skipWhile = function (predicate) {\r\n predicate = Utils.createLambda(predicate);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var index = 0;\r\n var isSkipEnd = false;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n while (!isSkipEnd) {\r\n if (enumerator.moveNext()) {\r\n if (!predicate(enumerator.current(), index++)) {\r\n isSkipEnd = true;\r\n return this.yieldReturn(enumerator.current());\r\n }\r\n continue;\r\n } else return false;\r\n }\r\n\r\n return (enumerator.moveNext())\r\n ? this.yieldReturn(enumerator.current())\r\n : false;\r\n\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\nEnumerable.prototype.take = function (count) {\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n return (index++ < count && enumerator.moveNext())\r\n ? this.yieldReturn(enumerator.current())\r\n : false;\r\n },\r\n function () { Utils.dispose(enumerator); }\r\n );\r\n });\r\n};\r\n\r\n// Overload:function(predicate)\r\n// Overload:function(predicate)\r\nEnumerable.prototype.takeWhile = function (predicate) {\r\n predicate = Utils.createLambda(predicate);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n return (enumerator.moveNext() && predicate(enumerator.current(), index++))\r\n ? this.yieldReturn(enumerator.current())\r\n : false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(count)\r\nEnumerable.prototype.takeExceptLast = function (count) {\r\n if (count == null) count = 1;\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n if (count <= 0) return source.getEnumerator(); // do nothing\r\n\r\n var enumerator;\r\n var q = [];\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n while (enumerator.moveNext()) {\r\n if (q.length == count) {\r\n q.push(enumerator.current());\r\n return this.yieldReturn(q.shift());\r\n }\r\n q.push(enumerator.current());\r\n }\r\n return false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\nEnumerable.prototype.takeFromLast = function (count) {\r\n if (count <= 0 || count == null) return Enumerable.empty();\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var sourceEnumerator;\r\n var enumerator;\r\n var q = [];\r\n\r\n return new IEnumerator(\r\n function () { sourceEnumerator = source.getEnumerator(); },\r\n function () {\r\n while (sourceEnumerator.moveNext()) {\r\n if (q.length == count) q.shift();\r\n q.push(sourceEnumerator.current());\r\n }\r\n if (enumerator == null) {\r\n enumerator = Enumerable.from(q).getEnumerator();\r\n }\r\n return (enumerator.moveNext())\r\n ? this.yieldReturn(enumerator.current())\r\n : false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n// Overload:function(item)\r\n// Overload:function(predicate)\r\nEnumerable.prototype.indexOf = function (item) {\r\n var found = null;\r\n\r\n // item as predicate\r\n if (typeof (item) === Types.Function) {\r\n this.forEach(function (x, i) {\r\n if (item(x, i)) {\r\n found = i;\r\n return false;\r\n }\r\n });\r\n }\r\n else {\r\n this.forEach(function (x, i) {\r\n if (x === item) {\r\n found = i;\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n return (found !== null) ? found : -1;\r\n};\r\n\r\n// Overload:function(item)\r\n// Overload:function(predicate)\r\nEnumerable.prototype.lastIndexOf = function (item) {\r\n var result = -1;\r\n\r\n // item as predicate\r\n if (typeof (item) === Types.Function) {\r\n this.forEach(function (x, i) {\r\n if (item(x, i)) result = i;\r\n });\r\n }\r\n else {\r\n this.forEach(function (x, i) {\r\n if (x === item) result = i;\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/* Convert Methods */\r\n\r\nEnumerable.prototype.cast = function () {\r\n return this;\r\n};\r\n\r\nEnumerable.prototype.asEnumerable = function () {\r\n return Enumerable.from(this);\r\n};\r\n\r\nEnumerable.prototype.toArray = function () {\r\n var array = [];\r\n this.forEach(function (x) { array.push(x); });\r\n return array;\r\n};\r\n\r\n// Overload:function(keySelector)\r\n// Overload:function(keySelector, elementSelector)\r\n// Overload:function(keySelector, elementSelector, compareSelector)\r\nEnumerable.prototype.toLookup = function (keySelector, elementSelector, compareSelector) {\r\n keySelector = Utils.createLambda(keySelector);\r\n elementSelector = Utils.createLambda(elementSelector);\r\n compareSelector = Utils.createLambda(compareSelector);\r\n\r\n var dict = new Dictionary(compareSelector);\r\n this.forEach(function (x) {\r\n var key = keySelector(x);\r\n var element = elementSelector(x);\r\n\r\n var array = dict.get(key);\r\n if (array !== undefined) array.push(element);\r\n else dict.add(key, [element]);\r\n });\r\n return new Lookup(dict);\r\n};\r\n\r\nEnumerable.prototype.toObject = function (keySelector, elementSelector) {\r\n keySelector = Utils.createLambda(keySelector);\r\n elementSelector = Utils.createLambda(elementSelector);\r\n\r\n var obj = {};\r\n this.forEach(function (x) {\r\n obj[keySelector(x)] = elementSelector(x);\r\n });\r\n return obj;\r\n};\r\n\r\n// Overload:function(keySelector, elementSelector)\r\n// Overload:function(keySelector, elementSelector, compareSelector)\r\nEnumerable.prototype.toDictionary = function (keySelector, elementSelector, compareSelector) {\r\n keySelector = Utils.createLambda(keySelector);\r\n elementSelector = Utils.createLambda(elementSelector);\r\n compareSelector = Utils.createLambda(compareSelector);\r\n\r\n var dict = new Dictionary(compareSelector);\r\n this.forEach(function (x) {\r\n dict.add(keySelector(x), elementSelector(x));\r\n });\r\n return dict;\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(replacer)\r\n// Overload:function(replacer, space)\r\nEnumerable.prototype.toJSONString = function (replacer, space) {\r\n if (typeof JSON === Types.Undefined || JSON.stringify == null) {\r\n throw new Error(\"toJSONString can't find JSON.stringify. This works native JSON support Browser or include json2.js\");\r\n }\r\n return JSON.stringify(this.toArray(), replacer, space);\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(separator)\r\n// Overload:function(separator,selector)\r\nEnumerable.prototype.toJoinedString = function (separator, selector) {\r\n if (separator == null) separator = \"\";\r\n if (selector == null) selector = Functions.Identity;\r\n\r\n return this.select(selector).toArray().join(separator);\r\n};\r\n\r\n\r\n/* Action Methods */\r\n\r\n// Overload:function(action)\r\n// Overload:function(action)\r\nEnumerable.prototype.doAction = function (action) {\r\n var source = this;\r\n action = Utils.createLambda(action);\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n if (enumerator.moveNext()) {\r\n action(enumerator.current(), index++);\r\n return this.yieldReturn(enumerator.current());\r\n }\r\n return false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\n// Overload:function(action)\r\n// Overload:function(action)\r\n// Overload:function(func)\r\n// Overload:function(func)\r\nEnumerable.prototype.forEach = function (action) {\r\n action = Utils.createLambda(action);\r\n\r\n var index = 0;\r\n var enumerator = this.getEnumerator();\r\n try {\r\n while (enumerator.moveNext()) {\r\n if (action(enumerator.current(), index++) === false) break;\r\n }\r\n } finally {\r\n Utils.dispose(enumerator);\r\n }\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(separator)\r\n// Overload:function(separator,selector)\r\nEnumerable.prototype.write = function (separator, selector) {\r\n if (separator == null) separator = \"\";\r\n selector = Utils.createLambda(selector);\r\n\r\n var isFirst = true;\r\n this.forEach(function (item) {\r\n if (isFirst) isFirst = false;\r\n else document.write(separator);\r\n document.write(selector(item));\r\n });\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(selector)\r\nEnumerable.prototype.writeLine = function (selector) {\r\n selector = Utils.createLambda(selector);\r\n\r\n this.forEach(function (item) {\r\n document.writeln(selector(item) + \"
\");\r\n });\r\n};\r\n\r\nEnumerable.prototype.force = function () {\r\n var enumerator = this.getEnumerator();\r\n\r\n try {\r\n while (enumerator.moveNext()) {\r\n }\r\n }\r\n finally {\r\n Utils.dispose(enumerator);\r\n }\r\n};\r\n\r\n/* Functional Methods */\r\n\r\nEnumerable.prototype.letBind = function (func) {\r\n func = Utils.createLambda(func);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n\r\n return new IEnumerator(\r\n function () {\r\n enumerator = Enumerable.from(func(source)).getEnumerator();\r\n },\r\n function () {\r\n return (enumerator.moveNext())\r\n ? this.yieldReturn(enumerator.current())\r\n : false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\nEnumerable.prototype.share = function () {\r\n var source = this;\r\n var sharedEnumerator;\r\n var disposed = false;\r\n\r\n return new DisposableEnumerable(function () {\r\n return new IEnumerator(\r\n function () {\r\n if (sharedEnumerator == null) {\r\n sharedEnumerator = source.getEnumerator();\r\n }\r\n },\r\n function () {\r\n if (disposed) throw new Error(\"enumerator is disposed\");\r\n\r\n return (sharedEnumerator.moveNext())\r\n ? this.yieldReturn(sharedEnumerator.current())\r\n : false;\r\n },\r\n Functions.Blank\r\n );\r\n }, function () {\r\n disposed = true;\r\n Utils.dispose(sharedEnumerator);\r\n });\r\n};\r\n\r\nEnumerable.prototype.memoize = function () {\r\n var source = this;\r\n var cache;\r\n var enumerator;\r\n var disposed = false;\r\n\r\n return new DisposableEnumerable(function () {\r\n var index = -1;\r\n\r\n return new IEnumerator(\r\n function () {\r\n if (enumerator == null) {\r\n enumerator = source.getEnumerator();\r\n cache = [];\r\n }\r\n },\r\n function () {\r\n if (disposed) throw new Error(\"enumerator is disposed\");\r\n\r\n index++;\r\n if (cache.length <= index) {\r\n return (enumerator.moveNext())\r\n ? this.yieldReturn(cache[index] = enumerator.current())\r\n : false;\r\n }\r\n\r\n return this.yieldReturn(cache[index]);\r\n },\r\n Functions.Blank\r\n );\r\n }, function () {\r\n disposed = true;\r\n Utils.dispose(enumerator);\r\n cache = null;\r\n });\r\n};\r\n\r\n/* Iterator (ES6 for..of) support */\r\nif (Utils.hasNativeIteratorSupport()) {\r\n Enumerable.prototype[Symbol.iterator] = function () {\r\n return {\r\n enumerator: this.getEnumerator(),\r\n next: function () {\r\n if (this.enumerator.moveNext()) {\r\n return {\r\n done: false,\r\n value: this.enumerator.current()\r\n };\r\n } else {\r\n return { done: true };\r\n }\r\n }\r\n };\r\n };\r\n}\r\n\r\n/* Error Handling Methods */\r\n\r\nEnumerable.prototype.catchError = function (handler) {\r\n handler = Utils.createLambda(handler);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n try {\r\n return (enumerator.moveNext())\r\n ? this.yieldReturn(enumerator.current())\r\n : false;\r\n } catch (e) {\r\n handler(e);\r\n return false;\r\n }\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n });\r\n};\r\n\r\nEnumerable.prototype.finallyAction = function (finallyAction) {\r\n finallyAction = Utils.createLambda(finallyAction);\r\n var source = this;\r\n\r\n return new Enumerable(function () {\r\n var enumerator;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n return (enumerator.moveNext())\r\n ? this.yieldReturn(enumerator.current())\r\n : false;\r\n },\r\n function () {\r\n try {\r\n Utils.dispose(enumerator);\r\n } finally {\r\n finallyAction();\r\n }\r\n });\r\n });\r\n};\r\n\r\n/* For Debug Methods */\r\n\r\n// Overload:function()\r\n// Overload:function(selector)\r\nEnumerable.prototype.log = function (selector) {\r\n selector = Utils.createLambda(selector);\r\n\r\n return this.doAction(function (item) {\r\n if (typeof console !== Types.Undefined) {\r\n console.log(selector(item));\r\n }\r\n });\r\n};\r\n\r\n// Overload:function()\r\n// Overload:function(message)\r\n// Overload:function(message,selector)\r\nEnumerable.prototype.trace = function (message, selector) {\r\n if (message == null) message = \"Trace\";\r\n selector = Utils.createLambda(selector);\r\n\r\n return this.doAction(function (item) {\r\n if (typeof console !== Types.Undefined) {\r\n console.log(message, selector(item));\r\n }\r\n });\r\n};\r\n\r\n// private\r\n\r\nvar OrderedEnumerable = function (source, keySelector, comparer, descending, parent) {\r\n this.source = source;\r\n this.keySelector = Utils.createLambda(keySelector);\r\n this.descending = descending;\r\n this.parent = parent;\r\n\r\n if (comparer)\r\n this.comparer = Utils.createLambda(comparer);\r\n};\r\nOrderedEnumerable.prototype = new Enumerable();\r\n\r\nOrderedEnumerable.prototype.createOrderedEnumerable = function (keySelector, comparer, descending) {\r\n return new OrderedEnumerable(this.source, keySelector, comparer, descending, this);\r\n};\r\n\r\nOrderedEnumerable.prototype.thenBy = function (keySelector, comparer) {\r\n return this.createOrderedEnumerable(keySelector, comparer, false);\r\n};\r\n\r\nOrderedEnumerable.prototype.thenByDescending = function (keySelector, comparer) {\r\n return this.createOrderedEnumerable(keySelector, comparer, true);\r\n};\r\n\r\nOrderedEnumerable.prototype.getEnumerator = function () {\r\n var self = this;\r\n var buffer;\r\n var indexes;\r\n var index = 0;\r\n\r\n return new IEnumerator(\r\n function () {\r\n buffer = [];\r\n indexes = [];\r\n self.source.forEach(function (item, index) {\r\n buffer.push(item);\r\n indexes.push(index);\r\n });\r\n var sortContext = SortContext.create(self, null);\r\n sortContext.GenerateKeys(buffer);\r\n\r\n indexes.sort(function (a, b) { return sortContext.compare(a, b); });\r\n },\r\n function () {\r\n return (index < indexes.length)\r\n ? this.yieldReturn(buffer[indexes[index++]])\r\n : false;\r\n },\r\n Functions.Blank\r\n );\r\n};\r\n\r\nvar SortContext = function (keySelector, comparer, descending, child) {\r\n this.keySelector = keySelector;\r\n this.descending = descending;\r\n this.child = child;\r\n this.comparer = comparer;\r\n this.keys = null;\r\n};\r\n\r\nSortContext.create = function (orderedEnumerable, currentContext) {\r\n var context = new SortContext(\r\n orderedEnumerable.keySelector, orderedEnumerable.comparer, orderedEnumerable.descending, currentContext\r\n );\r\n\r\n if (orderedEnumerable.parent != null) return SortContext.create(orderedEnumerable.parent, context);\r\n return context;\r\n};\r\n\r\nSortContext.prototype.GenerateKeys = function (source) {\r\n var len = source.length;\r\n var keySelector = this.keySelector;\r\n var keys = new Array(len);\r\n for (var i = 0; i < len; i++) keys[i] = keySelector(source[i]);\r\n this.keys = keys;\r\n\r\n if (this.child != null) this.child.GenerateKeys(source);\r\n};\r\n\r\nSortContext.prototype.compare = function (index1, index2) {\r\n var comparison = this.comparer ?\r\n this.comparer(this.keys[index1], this.keys[index2]) :\r\n Utils.compare(this.keys[index1], this.keys[index2]);\r\n\r\n if (comparison == 0) {\r\n if (this.child != null) return this.child.compare(index1, index2);\r\n return Utils.compare(index1, index2);\r\n }\r\n\r\n return (this.descending) ? -comparison : comparison;\r\n};\r\n\r\nvar DisposableEnumerable = function (getEnumerator, dispose) {\r\n this.dispose = dispose;\r\n Enumerable.call(this, getEnumerator);\r\n};\r\nDisposableEnumerable.prototype = new Enumerable();\r\n\r\n// optimize array or arraylike object\r\n\r\nvar ArrayEnumerable = function (source) {\r\n this.getSource = function () { return source; };\r\n};\r\nArrayEnumerable.prototype = new Enumerable();\r\n\r\nArrayEnumerable.prototype.any = function (predicate) {\r\n return (predicate == null)\r\n ? (this.getSource().length > 0)\r\n : Enumerable.prototype.any.apply(this, arguments);\r\n};\r\n\r\nArrayEnumerable.prototype.count = function (predicate) {\r\n return (predicate == null)\r\n ? this.getSource().length\r\n : Enumerable.prototype.count.apply(this, arguments);\r\n};\r\n\r\nArrayEnumerable.prototype.elementAt = function (index) {\r\n var source = this.getSource();\r\n return (0 <= index && index < source.length)\r\n ? source[index]\r\n : Enumerable.prototype.elementAt.apply(this, arguments);\r\n};\r\n\r\nArrayEnumerable.prototype.elementAtOrDefault = function (index, defaultValue) {\r\n if (defaultValue === undefined) defaultValue = null;\r\n var source = this.getSource();\r\n return (0 <= index && index < source.length)\r\n ? source[index]\r\n : defaultValue;\r\n};\r\n\r\nArrayEnumerable.prototype.first = function (predicate) {\r\n var source = this.getSource();\r\n return (predicate == null && source.length > 0)\r\n ? source[0]\r\n : Enumerable.prototype.first.apply(this, arguments);\r\n};\r\n\r\nArrayEnumerable.prototype.firstOrDefault = function (predicate, defaultValue) {\r\n if (predicate !== undefined) {\r\n return Enumerable.prototype.firstOrDefault.apply(this, arguments);\r\n }\r\n defaultValue = predicate;\r\n\r\n var source = this.getSource();\r\n return source.length > 0 ? source[0] : defaultValue;\r\n};\r\n\r\nArrayEnumerable.prototype.last = function (predicate) {\r\n var source = this.getSource();\r\n return (predicate == null && source.length > 0)\r\n ? source[source.length - 1]\r\n : Enumerable.prototype.last.apply(this, arguments);\r\n};\r\n\r\nArrayEnumerable.prototype.lastOrDefault = function (predicate, defaultValue) {\r\n if (predicate !== undefined) {\r\n return Enumerable.prototype.lastOrDefault.apply(this, arguments);\r\n }\r\n defaultValue = predicate;\r\n\r\n var source = this.getSource();\r\n return source.length > 0 ? source[source.length - 1] : defaultValue;\r\n};\r\n\r\nArrayEnumerable.prototype.skip = function (count) {\r\n var source = this.getSource();\r\n\r\n return new Enumerable(function () {\r\n var index;\r\n\r\n return new IEnumerator(\r\n function () { index = (count < 0) ? 0 : count; },\r\n function () {\r\n return (index < source.length)\r\n ? this.yieldReturn(source[index++])\r\n : false;\r\n },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\nArrayEnumerable.prototype.takeExceptLast = function (count) {\r\n if (count == null) count = 1;\r\n return this.take(this.getSource().length - count);\r\n};\r\n\r\nArrayEnumerable.prototype.takeFromLast = function (count) {\r\n return this.skip(this.getSource().length - count);\r\n};\r\n\r\nArrayEnumerable.prototype.reverse = function () {\r\n var source = this.getSource();\r\n\r\n return new Enumerable(function () {\r\n var index;\r\n\r\n return new IEnumerator(\r\n function () {\r\n index = source.length;\r\n },\r\n function () {\r\n return (index > 0)\r\n ? this.yieldReturn(source[--index])\r\n : false;\r\n },\r\n Functions.Blank);\r\n });\r\n};\r\n\r\nArrayEnumerable.prototype.sequenceEqual = function (second, compareSelector) {\r\n if ((second instanceof ArrayEnumerable || second instanceof Array)\r\n && compareSelector == null\r\n && Enumerable.from(second).count() != this.count()) {\r\n return false;\r\n }\r\n\r\n return Enumerable.prototype.sequenceEqual.apply(this, arguments);\r\n};\r\n\r\nArrayEnumerable.prototype.toJoinedString = function (separator, selector) {\r\n var source = this.getSource();\r\n if (selector != null || !(source instanceof Array)) {\r\n return Enumerable.prototype.toJoinedString.apply(this, arguments);\r\n }\r\n\r\n if (separator == null) separator = \"\";\r\n return source.join(separator);\r\n};\r\n\r\nArrayEnumerable.prototype.getEnumerator = function () {\r\n var source = this.getSource();\r\n var index = -1;\r\n\r\n // fast and simple enumerator\r\n return {\r\n current: function () { return source[index]; },\r\n moveNext: function () {\r\n return ++index < source.length;\r\n },\r\n dispose: Functions.Blank\r\n };\r\n};\r\n\r\n// optimization for multiple where and multiple select and whereselect\r\n\r\nvar WhereEnumerable = function (source, predicate) {\r\n this.prevSource = source;\r\n this.prevPredicate = predicate; // predicate.length always <= 1\r\n};\r\nWhereEnumerable.prototype = new Enumerable();\r\n\r\nWhereEnumerable.prototype.where = function (predicate) {\r\n predicate = Utils.createLambda(predicate);\r\n\r\n if (predicate.length <= 1) {\r\n var prevPredicate = this.prevPredicate;\r\n var composedPredicate = function (x) { return prevPredicate(x) && predicate(x); };\r\n return new WhereEnumerable(this.prevSource, composedPredicate);\r\n }\r\n else {\r\n // if predicate use index, can't compose\r\n return Enumerable.prototype.where.call(this, predicate);\r\n }\r\n};\r\n\r\nWhereEnumerable.prototype.select = function (selector) {\r\n selector = Utils.createLambda(selector);\r\n\r\n return (selector.length <= 1)\r\n ? new WhereSelectEnumerable(this.prevSource, this.prevPredicate, selector)\r\n : Enumerable.prototype.select.call(this, selector);\r\n};\r\n\r\nWhereEnumerable.prototype.getEnumerator = function () {\r\n var predicate = this.prevPredicate;\r\n var source = this.prevSource;\r\n var enumerator;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n while (enumerator.moveNext()) {\r\n if (predicate(enumerator.current())) {\r\n return this.yieldReturn(enumerator.current());\r\n }\r\n }\r\n return false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n};\r\n\r\nvar WhereSelectEnumerable = function (source, predicate, selector) {\r\n this.prevSource = source;\r\n this.prevPredicate = predicate; // predicate.length always <= 1 or null\r\n this.prevSelector = selector; // selector.length always <= 1\r\n};\r\nWhereSelectEnumerable.prototype = new Enumerable();\r\n\r\nWhereSelectEnumerable.prototype.where = function (predicate) {\r\n predicate = Utils.createLambda(predicate);\r\n\r\n return (predicate.length <= 1)\r\n ? new WhereEnumerable(this, predicate)\r\n : Enumerable.prototype.where.call(this, predicate);\r\n};\r\n\r\nWhereSelectEnumerable.prototype.select = function (selector) {\r\n selector = Utils.createLambda(selector);\r\n\r\n if (selector.length <= 1) {\r\n var prevSelector = this.prevSelector;\r\n var composedSelector = function (x) { return selector(prevSelector(x)); };\r\n return new WhereSelectEnumerable(this.prevSource, this.prevPredicate, composedSelector);\r\n }\r\n else {\r\n // if selector use index, can't compose\r\n return Enumerable.prototype.select.call(this, selector);\r\n }\r\n};\r\n\r\nWhereSelectEnumerable.prototype.getEnumerator = function () {\r\n var predicate = this.prevPredicate;\r\n var selector = this.prevSelector;\r\n var source = this.prevSource;\r\n var enumerator;\r\n\r\n return new IEnumerator(\r\n function () { enumerator = source.getEnumerator(); },\r\n function () {\r\n while (enumerator.moveNext()) {\r\n if (predicate == null || predicate(enumerator.current())) {\r\n return this.yieldReturn(selector(enumerator.current()));\r\n }\r\n }\r\n return false;\r\n },\r\n function () { Utils.dispose(enumerator); });\r\n};\r\n\r\n// Collections\r\n\r\nvar Dictionary = (function () {\r\n // static utility methods\r\n var callHasOwnProperty = function (target, key) {\r\n return Object.prototype.hasOwnProperty.call(target, key);\r\n };\r\n\r\n var computeHashCode = function (obj) {\r\n if (obj === null) return \"null\";\r\n if (obj === undefined) return \"undefined\";\r\n\r\n return (typeof obj.toString === Types.Function)\r\n ? obj.toString()\r\n : Object.prototype.toString.call(obj);\r\n };\r\n\r\n // LinkedList for Dictionary\r\n var HashEntry = function (key, value) {\r\n this.key = key;\r\n this.value = value;\r\n this.prev = null;\r\n this.next = null;\r\n };\r\n\r\n var EntryList = function () {\r\n this.first = null;\r\n this.last = null;\r\n };\r\n EntryList.prototype =\r\n {\r\n addLast: function (entry) {\r\n if (this.last != null) {\r\n this.last.next = entry;\r\n entry.prev = this.last;\r\n this.last = entry;\r\n } else this.first = this.last = entry;\r\n },\r\n\r\n replace: function (entry, newEntry) {\r\n if (entry.prev != null) {\r\n entry.prev.next = newEntry;\r\n newEntry.prev = entry.prev;\r\n } else this.first = newEntry;\r\n\r\n if (entry.next != null) {\r\n entry.next.prev = newEntry;\r\n newEntry.next = entry.next;\r\n } else this.last = newEntry;\r\n\r\n },\r\n\r\n remove: function (entry) {\r\n if (entry.prev != null) entry.prev.next = entry.next;\r\n else this.first = entry.next;\r\n\r\n if (entry.next != null) entry.next.prev = entry.prev;\r\n else this.last = entry.prev;\r\n }\r\n };\r\n\r\n // Overload:function()\r\n // Overload:function(compareSelector)\r\n var Dictionary = function (compareSelector) {\r\n this.countField = 0;\r\n this.entryList = new EntryList();\r\n this.buckets = {}; // as Dictionary>\r\n this.compareSelector = (compareSelector == null) ? Functions.Identity : compareSelector;\r\n };\r\n Dictionary.prototype =\r\n {\r\n add: function (key, value) {\r\n var compareKey = this.compareSelector(key);\r\n var hash = computeHashCode(compareKey);\r\n var entry = new HashEntry(key, value);\r\n if (callHasOwnProperty(this.buckets, hash)) {\r\n var array = this.buckets[hash];\r\n for (var i = 0; i < array.length; i++) {\r\n if (this.compareSelector(array[i].key) === compareKey) {\r\n this.entryList.replace(array[i], entry);\r\n array[i] = entry;\r\n return;\r\n }\r\n }\r\n array.push(entry);\r\n } else {\r\n this.buckets[hash] = [entry];\r\n }\r\n this.countField++;\r\n this.entryList.addLast(entry);\r\n },\r\n\r\n get: function (key) {\r\n var compareKey = this.compareSelector(key);\r\n var hash = computeHashCode(compareKey);\r\n if (!callHasOwnProperty(this.buckets, hash)) return undefined;\r\n\r\n var array = this.buckets[hash];\r\n for (var i = 0; i < array.length; i++) {\r\n var entry = array[i];\r\n if (this.compareSelector(entry.key) === compareKey) return entry.value;\r\n }\r\n return undefined;\r\n },\r\n\r\n set: function (key, value) {\r\n var compareKey = this.compareSelector(key);\r\n var hash = computeHashCode(compareKey);\r\n if (callHasOwnProperty(this.buckets, hash)) {\r\n var array = this.buckets[hash];\r\n for (var i = 0; i < array.length; i++) {\r\n if (this.compareSelector(array[i].key) === compareKey) {\r\n var newEntry = new HashEntry(key, value);\r\n this.entryList.replace(array[i], newEntry);\r\n array[i] = newEntry;\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n contains: function (key) {\r\n var compareKey = this.compareSelector(key);\r\n var hash = computeHashCode(compareKey);\r\n if (!callHasOwnProperty(this.buckets, hash)) return false;\r\n\r\n var array = this.buckets[hash];\r\n for (var i = 0; i < array.length; i++) {\r\n if (this.compareSelector(array[i].key) === compareKey) return true;\r\n }\r\n return false;\r\n },\r\n\r\n clear: function () {\r\n this.countField = 0;\r\n this.buckets = {};\r\n this.entryList = new EntryList();\r\n },\r\n\r\n remove: function (key) {\r\n var compareKey = this.compareSelector(key);\r\n var hash = computeHashCode(compareKey);\r\n if (!callHasOwnProperty(this.buckets, hash)) return;\r\n\r\n var array = this.buckets[hash];\r\n for (var i = 0; i < array.length; i++) {\r\n if (this.compareSelector(array[i].key) === compareKey) {\r\n this.entryList.remove(array[i]);\r\n array.splice(i, 1);\r\n if (array.length == 0) delete this.buckets[hash];\r\n this.countField--;\r\n return;\r\n }\r\n }\r\n },\r\n\r\n count: function () {\r\n return this.countField;\r\n },\r\n\r\n toEnumerable: function () {\r\n var self = this;\r\n return new Enumerable(function () {\r\n var currentEntry;\r\n\r\n return new IEnumerator(\r\n function () { currentEntry = self.entryList.first; },\r\n function () {\r\n if (currentEntry != null) {\r\n var result = { key: currentEntry.key, value: currentEntry.value };\r\n currentEntry = currentEntry.next;\r\n return this.yieldReturn(result);\r\n }\r\n return false;\r\n },\r\n Functions.Blank);\r\n });\r\n }\r\n };\r\n\r\n return Dictionary;\r\n})();\r\n\r\n// dictionary = Dictionary\r\nvar Lookup = function (dictionary) {\r\n this.count = function () {\r\n return dictionary.count();\r\n };\r\n this.get = function (key) {\r\n return Enumerable.from(dictionary.get(key));\r\n };\r\n this.contains = function (key) {\r\n return dictionary.contains(key);\r\n };\r\n this.toEnumerable = function () {\r\n return dictionary.toEnumerable().select(function (kvp) {\r\n return new Grouping(kvp.key, kvp.value);\r\n });\r\n };\r\n};\r\n\r\nvar Grouping = function (groupKey, elements) {\r\n this.key = function () {\r\n return groupKey;\r\n };\r\n ArrayEnumerable.call(this, elements);\r\n};\r\nGrouping.prototype = new ArrayEnumerable();\r\n\r\nexport default Enumerable;","//计算x轴间隔\r\nfunction xInterval(xAxis){\r\n var retInterval = 1;\r\n let xmin;\r\n let xmax;\r\n if (xAxis.length > 0) {\r\n xmin = Math.min.apply(null, xAxis);\r\n xmax = Math.max.apply(null, xAxis);\r\n }\r\n var xDiff = xmax - xmin;\r\n\r\n if (xDiff < 1100)\r\n retInterval = 49;\r\n else if (xDiff >= 1100 && xDiff <= 2800)\r\n retInterval = 99;\r\n else if (xDiff > 2800)\r\n retInterval = 999;\r\n else\r\n retInterval = 1;\r\n return retInterval;\r\n}\r\n//计算x轴、y轴最大最小值\r\nfunction xArray(xAxis) {\r\n let retArray = [];\r\n let xmin;\r\n let xmax;\r\n if (xAxis.length > 0) {\r\n xmin = Math.min.apply(null, xAxis);\r\n xmax = Math.max.apply(null, xAxis);\r\n }\r\n let interval = 10;\r\n let xAxisDiff = xInterval(xAxis);\r\n if (parseInt(xAxisDiff) > 0)\r\n interval = parseInt(xAxisDiff) + 1;\r\n\r\n interval = parseInt(interval);\r\n if (xmin % interval != 0) {\r\n var minDiff = 0;\r\n if (xmin > 10) {\r\n var v = xmin - 1;\r\n minDiff = parseInt(v / interval);\r\n } else {\r\n minDiff = parseInt(xmin / interval) - 1;\r\n }\r\n if (parseInt(minDiff) <= 0)\r\n xmin = 0\r\n else\r\n xmin = minDiff * interval;\r\n }\r\n if (xmax % interval != 0) {\r\n xmax = (parseInt(xmax / interval) + 1) * interval;\r\n }\r\n for (xmin; xmin <= xmax; xmin++) {\r\n retArray.push(xmin);\r\n }\r\n return retArray;\r\n}\r\n\r\nexport {xInterval,xArray}\r\n","export const calcDate = (date1, date2) => {\r\n let date3 = date2 - date1;\r\n\r\n let days = Math.floor(date3 / (24 * 3600 * 1000))\r\n\r\n let leave1 = date3 % (24 * 3600 * 1000) //计算天数后剩余的毫秒数\r\n let hours = Math.floor(leave1 / (3600 * 1000))\r\n\r\n let leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数\r\n let minutes = Math.floor(leave2 / (60 * 1000))\r\n\r\n let leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数\r\n let seconds = Math.round(date3 / 1000)\r\n return {\r\n leave1,\r\n leave2,\r\n leave3,\r\n days: days,\r\n hours: hours,\r\n minutes: minutes,\r\n seconds: seconds,\r\n }\r\n}\r\nexport function formatDate (date, fmt) {\r\n let o = {\r\n 'M+': date.getMonth() + 1, // 月份\r\n 'd+': date.getDate(), // 日\r\n 'h+': date.getHours(), // 小时\r\n 'm+': date.getMinutes(), // 分\r\n 's+': date.getSeconds(), // 秒\r\n 'S': date.getMilliseconds() // 毫秒\r\n }\r\n if (/(y+)/.test(fmt)) {\r\n fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))\r\n }\r\n for (var k in o) {\r\n if (new RegExp('(' + k + ')').test(fmt)) {\r\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))\r\n }\r\n }\r\n return fmt\r\n}\r\n\r\n/**\r\n * 日期格式化\r\n */\r\nexport function dateFormat(date, format) {\r\n format = format || 'yyyy-MM-dd hh:mm:ss';\r\n if (date !== 'Invalid Date') {\r\n let o = {\r\n \"M+\": date.getMonth() + 1, //month\r\n \"d+\": date.getDate(), //day\r\n \"h+\": date.getHours(), //hour\r\n \"m+\": date.getMinutes(), //minute\r\n \"s+\": date.getSeconds(), //second\r\n \"q+\": Math.floor((date.getMonth() + 3) / 3), //quarter\r\n \"S\": date.getMilliseconds() //millisecond\r\n }\r\n if (/(y+)/.test(format)) format = format.replace(RegExp.$1,\r\n (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\r\n for (let k in o)\r\n if (new RegExp(\"(\" + k + \")\").test(format))\r\n format = format.replace(RegExp.$1,\r\n RegExp.$1.length === 1 ? o[k] :\r\n (\"00\" + o[k]).substr((\"\" + o[k]).length));\r\n return format;\r\n }\r\n return '';\r\n\r\n}\r\n\r\n/**\r\n * 获取指定日期\r\n * @param time 日期\r\n * @param day 传-1表始前一天,传1表始后一天,0表示当天\r\n * @param format 返回格式\r\n * @returns {string}\r\n */\r\nexport function getScheduledDate(time,day,format) {\r\n let date = new Date(time);\r\n date.setDate(date.getDate() + day);\r\n //年\r\n let yy = date.getFullYear();\r\n //月\r\n let mm = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;\r\n //日\r\n let dd = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();\r\n //小时\r\n let hh = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();\r\n //分钟\r\n let mf = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();\r\n //秒钟\r\n let ms = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();\r\n\r\n let result = '';\r\n if (format == 'yyyy年MM月dd日 hh:mm:ss') {\r\n result = yy + '年' + mm + '月' + dd + '日 ' + hh + ':' + mf + ':' + ms;\r\n } else if (format == 'yyyy年MM月dd日 hh:mm') {\r\n result = yy + '年' + mm + '月' + dd + '日 ' + hh + ':' + mf;\r\n } else if (format == 'yyyy年MM月dd日') {\r\n result = yy + '年' + hh + '月' + dd + '日 ';\r\n } else if (format == 'M月d日 hh:mm') {\r\n result = yy + '月' + dd + '日' + ' ' + hh + ':' + mf;\r\n } else if (format == 'yyyy-MM-dd hh:mm:ss') {\r\n result = yy + '-' + mm + '-' + dd + ' ' + hh + ':' + mf + ':' + ms;\r\n }else if (format == 'yyyy-MM-dd hh:mm') {\r\n result = yy + '-' + mm + '-' + dd + ' ' + hh + ':' + mf;\r\n } else if (format == 'yyyy-MM-dd') {\r\n result = yy + '-' + hh + '-' + dd;\r\n } else if (format == 'MM-dd hh:mm') {\r\n result = mm + '-' + dd + ' ' + hh + ':' + mf;\r\n } else if (format == 'yyyy.MM.dd') {\r\n result = yy + '.' + mm + '.' + dd;\r\n }\r\n return result;\r\n}"],"sourceRoot":""}