1 line
58 KiB
JSON
1 line
58 KiB
JSON
{"ast":null,"code":"import \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.sort.js\";\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/*\n* A third-party license is embedded for some of the code in this file:\n* The \"scaleLevels\" was originally copied from \"d3.js\" with some\n* modifications made for this project.\n* (See more details in the comment on the definition of \"scaleLevels\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\n// [About UTC and local time zone]:\n// In most cases, `number.parseDate` will treat input data string as local time\n// (except time zone is specified in time string). And `format.formateTime` returns\n// local time by default. option.useUTC is false by default. This design has\n// considered these common cases:\n// (1) Time that is persistent in server is in UTC, but it is needed to be displayed\n// in local time by default.\n// (2) By default, the input data string (e.g., '2011-01-02') should be displayed\n// as its original time, without any time difference.\n\nimport * as numberUtil from '../util/number.js';\nimport { ONE_SECOND, ONE_MINUTE, ONE_HOUR, ONE_DAY, ONE_YEAR, format, leveledFormat, getUnitValue, timeUnits, fullLeveledFormatter, getPrimaryTimeUnit, isPrimaryTimeUnit, getDefaultFormatPrecisionOfInterval, fullYearGetterName, monthSetterName, fullYearSetterName, dateSetterName, hoursGetterName, hoursSetterName, minutesSetterName, secondsSetterName, millisecondsSetterName, monthGetterName, dateGetterName, minutesGetterName, secondsGetterName, millisecondsGetterName } from '../util/time.js';\nimport * as scaleHelper from './helper.js';\nimport IntervalScale from './Interval.js';\nimport Scale from './Scale.js';\nimport { warn } from '../util/log.js';\nimport { filter, isNumber, map } from 'zrender/lib/core/util.js'; // FIXME 公用?\n\nvar bisect = function bisect(a, x, lo, hi) {\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n\n if (a[mid][1] < x) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n return lo;\n};\n\nvar TimeScale =\n/** @class */\nfunction (_super) {\n __extends(TimeScale, _super);\n\n function TimeScale(settings) {\n var _this = _super.call(this, settings) || this;\n\n _this.type = 'time';\n return _this;\n }\n /**\n * Get label is mainly for other components like dataZoom, tooltip.\n */\n\n\n TimeScale.prototype.getLabel = function (tick) {\n var useUTC = this.getSetting('useUTC');\n return format(tick.value, fullLeveledFormatter[getDefaultFormatPrecisionOfInterval(getPrimaryTimeUnit(this._minLevelUnit))] || fullLeveledFormatter.second, useUTC, this.getSetting('locale'));\n };\n\n TimeScale.prototype.getFormattedLabel = function (tick, idx, labelFormatter) {\n var isUTC = this.getSetting('useUTC');\n var lang = this.getSetting('locale');\n return leveledFormat(tick, idx, labelFormatter, lang, isUTC);\n };\n /**\n * @override\n */\n\n\n TimeScale.prototype.getTicks = function () {\n var interval = this._interval;\n var extent = this._extent;\n var ticks = []; // If interval is 0, return [];\n\n if (!interval) {\n return ticks;\n }\n\n ticks.push({\n value: extent[0],\n level: 0\n });\n var useUTC = this.getSetting('useUTC');\n var innerTicks = getIntervalTicks(this._minLevelUnit, this._approxInterval, useUTC, extent);\n ticks = ticks.concat(innerTicks);\n ticks.push({\n value: extent[1],\n level: 0\n });\n return ticks;\n };\n\n TimeScale.prototype.calcNiceExtent = function (opt) {\n var extent = this._extent; // If extent start and end are same, expand them\n\n if (extent[0] === extent[1]) {\n // Expand extent\n extent[0] -= ONE_DAY;\n extent[1] += ONE_DAY;\n } // If there are no data and extent are [Infinity, -Infinity]\n\n\n if (extent[1] === -Infinity && extent[0] === Infinity) {\n var d = new Date();\n extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate());\n extent[0] = extent[1] - ONE_DAY;\n }\n\n this.calcNiceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);\n };\n\n TimeScale.prototype.calcNiceTicks = function (approxTickNum, minInterval, maxInterval) {\n approxTickNum = approxTickNum || 10;\n var extent = this._extent;\n var span = extent[1] - extent[0];\n this._approxInterval = span / approxTickNum;\n\n if (minInterval != null && this._approxInterval < minInterval) {\n this._approxInterval = minInterval;\n }\n\n if (maxInterval != null && this._approxInterval > maxInterval) {\n this._approxInterval = maxInterval;\n }\n\n var scaleIntervalsLen = scaleIntervals.length;\n var idx = Math.min(bisect(scaleIntervals, this._approxInterval, 0, scaleIntervalsLen), scaleIntervalsLen - 1); // Interval that can be used to calculate ticks\n\n this._interval = scaleIntervals[idx][1]; // Min level used when picking ticks from top down.\n // We check one more level to avoid the ticks are to sparse in some case.\n\n this._minLevelUnit = scaleIntervals[Math.max(idx - 1, 0)][0];\n };\n\n TimeScale.prototype.parse = function (val) {\n // val might be float.\n return isNumber(val) ? val : +numberUtil.parseDate(val);\n };\n\n TimeScale.prototype.contain = function (val) {\n return scaleHelper.contain(this.parse(val), this._extent);\n };\n\n TimeScale.prototype.normalize = function (val) {\n return scaleHelper.normalize(this.parse(val), this._extent);\n };\n\n TimeScale.prototype.scale = function (val) {\n return scaleHelper.scale(val, this._extent);\n };\n\n TimeScale.type = 'time';\n return TimeScale;\n}(IntervalScale);\n/**\n * This implementation was originally copied from \"d3.js\"\n * <https://github.com/d3/d3/blob/b516d77fb8566b576088e73410437494717ada26/src/time/scale.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n */\n\n\nvar scaleIntervals = [// Format interval\n['second', ONE_SECOND], ['minute', ONE_MINUTE], ['hour', ONE_HOUR], ['quarter-day', ONE_HOUR * 6], ['half-day', ONE_HOUR * 12], ['day', ONE_DAY * 1.2], ['half-week', ONE_DAY * 3.5], ['week', ONE_DAY * 7], ['month', ONE_DAY * 31], ['quarter', ONE_DAY * 95], ['half-year', ONE_YEAR / 2], ['year', ONE_YEAR] // 1Y\n];\n\nfunction isUnitValueSame(unit, valueA, valueB, isUTC) {\n var dateA = numberUtil.parseDate(valueA);\n var dateB = numberUtil.parseDate(valueB);\n\n var isSame = function isSame(unit) {\n return getUnitValue(dateA, unit, isUTC) === getUnitValue(dateB, unit, isUTC);\n };\n\n var isSameYear = function isSameYear() {\n return isSame('year');\n }; // const isSameHalfYear = () => isSameYear() && isSame('half-year');\n // const isSameQuater = () => isSameYear() && isSame('quarter');\n\n\n var isSameMonth = function isSameMonth() {\n return isSameYear() && isSame('month');\n };\n\n var isSameDay = function isSameDay() {\n return isSameMonth() && isSame('day');\n }; // const isSameHalfDay = () => isSameDay() && isSame('half-day');\n\n\n var isSameHour = function isSameHour() {\n return isSameDay() && isSame('hour');\n };\n\n var isSameMinute = function isSameMinute() {\n return isSameHour() && isSame('minute');\n };\n\n var isSameSecond = function isSameSecond() {\n return isSameMinute() && isSame('second');\n };\n\n var isSameMilliSecond = function isSameMilliSecond() {\n return isSameSecond() && isSame('millisecond');\n };\n\n switch (unit) {\n case 'year':\n return isSameYear();\n\n case 'month':\n return isSameMonth();\n\n case 'day':\n return isSameDay();\n\n case 'hour':\n return isSameHour();\n\n case 'minute':\n return isSameMinute();\n\n case 'second':\n return isSameSecond();\n\n case 'millisecond':\n return isSameMilliSecond();\n }\n} // const primaryUnitGetters = {\n// year: fullYearGetterName(),\n// month: monthGetterName(),\n// day: dateGetterName(),\n// hour: hoursGetterName(),\n// minute: minutesGetterName(),\n// second: secondsGetterName(),\n// millisecond: millisecondsGetterName()\n// };\n// const primaryUnitUTCGetters = {\n// year: fullYearGetterName(true),\n// month: monthGetterName(true),\n// day: dateGetterName(true),\n// hour: hoursGetterName(true),\n// minute: minutesGetterName(true),\n// second: secondsGetterName(true),\n// millisecond: millisecondsGetterName(true)\n// };\n// function moveTick(date: Date, unitName: TimeUnit, step: number, isUTC: boolean) {\n// step = step || 1;\n// switch (getPrimaryTimeUnit(unitName)) {\n// case 'year':\n// date[fullYearSetterName(isUTC)](date[fullYearGetterName(isUTC)]() + step);\n// break;\n// case 'month':\n// date[monthSetterName(isUTC)](date[monthGetterName(isUTC)]() + step);\n// break;\n// case 'day':\n// date[dateSetterName(isUTC)](date[dateGetterName(isUTC)]() + step);\n// break;\n// case 'hour':\n// date[hoursSetterName(isUTC)](date[hoursGetterName(isUTC)]() + step);\n// break;\n// case 'minute':\n// date[minutesSetterName(isUTC)](date[minutesGetterName(isUTC)]() + step);\n// break;\n// case 'second':\n// date[secondsSetterName(isUTC)](date[secondsGetterName(isUTC)]() + step);\n// break;\n// case 'millisecond':\n// date[millisecondsSetterName(isUTC)](date[millisecondsGetterName(isUTC)]() + step);\n// break;\n// }\n// return date.getTime();\n// }\n// const DATE_INTERVALS = [[8, 7.5], [4, 3.5], [2, 1.5]];\n// const MONTH_INTERVALS = [[6, 5.5], [3, 2.5], [2, 1.5]];\n// const MINUTES_SECONDS_INTERVALS = [[30, 30], [20, 20], [15, 15], [10, 10], [5, 5], [2, 2]];\n\n\nfunction getDateInterval(approxInterval, daysInMonth) {\n approxInterval /= ONE_DAY;\n return approxInterval > 16 ? 16 // Math.floor(daysInMonth / 2) + 1 // In this case we only want one tick between two months.\n : approxInterval > 7.5 ? 7 // TODO week 7 or day 8?\n : approxInterval > 3.5 ? 4 : approxInterval > 1.5 ? 2 : 1;\n}\n\nfunction getMonthInterval(approxInterval) {\n var APPROX_ONE_MONTH = 30 * ONE_DAY;\n approxInterval /= APPROX_ONE_MONTH;\n return approxInterval > 6 ? 6 : approxInterval > 3 ? 3 : approxInterval > 2 ? 2 : 1;\n}\n\nfunction getHourInterval(approxInterval) {\n approxInterval /= ONE_HOUR;\n return approxInterval > 12 ? 12 : approxInterval > 6 ? 6 : approxInterval > 3.5 ? 4 : approxInterval > 2 ? 2 : 1;\n}\n\nfunction getMinutesAndSecondsInterval(approxInterval, isMinutes) {\n approxInterval /= isMinutes ? ONE_MINUTE : ONE_SECOND;\n return approxInterval > 30 ? 30 : approxInterval > 20 ? 20 : approxInterval > 15 ? 15 : approxInterval > 10 ? 10 : approxInterval > 5 ? 5 : approxInterval > 2 ? 2 : 1;\n}\n\nfunction getMillisecondsInterval(approxInterval) {\n return numberUtil.nice(approxInterval, true);\n}\n\nfunction getFirstTimestampOfUnit(date, unitName, isUTC) {\n var outDate = new Date(date);\n\n switch (getPrimaryTimeUnit(unitName)) {\n case 'year':\n case 'month':\n outDate[monthSetterName(isUTC)](0);\n\n case 'day':\n outDate[dateSetterName(isUTC)](1);\n\n case 'hour':\n outDate[hoursSetterName(isUTC)](0);\n\n case 'minute':\n outDate[minutesSetterName(isUTC)](0);\n\n case 'second':\n outDate[secondsSetterName(isUTC)](0);\n outDate[millisecondsSetterName(isUTC)](0);\n }\n\n return outDate.getTime();\n}\n\nfunction getIntervalTicks(bottomUnitName, approxInterval, isUTC, extent) {\n var safeLimit = 10000;\n var unitNames = timeUnits;\n var iter = 0;\n\n function addTicksInSpan(interval, minTimestamp, maxTimestamp, getMethodName, setMethodName, isDate, out) {\n var date = new Date(minTimestamp);\n var dateTime = minTimestamp;\n var d = date[getMethodName](); // if (isDate) {\n // d -= 1; // Starts with 0; PENDING\n // }\n\n while (dateTime < maxTimestamp && dateTime <= extent[1]) {\n out.push({\n value: dateTime\n });\n d += interval;\n date[setMethodName](d);\n dateTime = date.getTime();\n } // This extra tick is for calcuating ticks of next level. Will not been added to the final result\n\n\n out.push({\n value: dateTime,\n notAdd: true\n });\n }\n\n function addLevelTicks(unitName, lastLevelTicks, levelTicks) {\n var newAddedTicks = [];\n var isFirstLevel = !lastLevelTicks.length;\n\n if (isUnitValueSame(getPrimaryTimeUnit(unitName), extent[0], extent[1], isUTC)) {\n return;\n }\n\n if (isFirstLevel) {\n lastLevelTicks = [{\n // TODO Optimize. Not include so may ticks.\n value: getFirstTimestampOfUnit(new Date(extent[0]), unitName, isUTC)\n }, {\n value: extent[1]\n }];\n }\n\n for (var i = 0; i < lastLevelTicks.length - 1; i++) {\n var startTick = lastLevelTicks[i].value;\n var endTick = lastLevelTicks[i + 1].value;\n\n if (startTick === endTick) {\n continue;\n }\n\n var interval = void 0;\n var getterName = void 0;\n var setterName = void 0;\n var isDate = false;\n\n switch (unitName) {\n case 'year':\n interval = Math.max(1, Math.round(approxInterval / ONE_DAY / 365));\n getterName = fullYearGetterName(isUTC);\n setterName = fullYearSetterName(isUTC);\n break;\n\n case 'half-year':\n case 'quarter':\n case 'month':\n interval = getMonthInterval(approxInterval);\n getterName = monthGetterName(isUTC);\n setterName = monthSetterName(isUTC);\n break;\n\n case 'week': // PENDING If week is added. Ignore day.\n\n case 'half-week':\n case 'day':\n interval = getDateInterval(approxInterval, 31); // Use 32 days and let interval been 16\n\n getterName = dateGetterName(isUTC);\n setterName = dateSetterName(isUTC);\n isDate = true;\n break;\n\n case 'half-day':\n case 'quarter-day':\n case 'hour':\n interval = getHourInterval(approxInterval);\n getterName = hoursGetterName(isUTC);\n setterName = hoursSetterName(isUTC);\n break;\n\n case 'minute':\n interval = getMinutesAndSecondsInterval(approxInterval, true);\n getterName = minutesGetterName(isUTC);\n setterName = minutesSetterName(isUTC);\n break;\n\n case 'second':\n interval = getMinutesAndSecondsInterval(approxInterval, false);\n getterName = secondsGetterName(isUTC);\n setterName = secondsSetterName(isUTC);\n break;\n\n case 'millisecond':\n interval = getMillisecondsInterval(approxInterval);\n getterName = millisecondsGetterName(isUTC);\n setterName = millisecondsSetterName(isUTC);\n break;\n }\n\n addTicksInSpan(interval, startTick, endTick, getterName, setterName, isDate, newAddedTicks);\n\n if (unitName === 'year' && levelTicks.length > 1 && i === 0) {\n // Add nearest years to the left extent.\n levelTicks.unshift({\n value: levelTicks[0].value - interval\n });\n }\n }\n\n for (var i = 0; i < newAddedTicks.length; i++) {\n levelTicks.push(newAddedTicks[i]);\n } // newAddedTicks.length && console.log(unitName, newAddedTicks);\n\n\n return newAddedTicks;\n }\n\n var levelsTicks = [];\n var currentLevelTicks = [];\n var tickCount = 0;\n var lastLevelTickCount = 0;\n\n for (var i = 0; i < unitNames.length && iter++ < safeLimit; ++i) {\n var primaryTimeUnit = getPrimaryTimeUnit(unitNames[i]);\n\n if (!isPrimaryTimeUnit(unitNames[i])) {\n // TODO\n continue;\n }\n\n addLevelTicks(unitNames[i], levelsTicks[levelsTicks.length - 1] || [], currentLevelTicks);\n var nextPrimaryTimeUnit = unitNames[i + 1] ? getPrimaryTimeUnit(unitNames[i + 1]) : null;\n\n if (primaryTimeUnit !== nextPrimaryTimeUnit) {\n if (currentLevelTicks.length) {\n lastLevelTickCount = tickCount; // Remove the duplicate so the tick count can be precisely.\n\n currentLevelTicks.sort(function (a, b) {\n return a.value - b.value;\n });\n var levelTicksRemoveDuplicated = [];\n\n for (var i_1 = 0; i_1 < currentLevelTicks.length; ++i_1) {\n var tickValue = currentLevelTicks[i_1].value;\n\n if (i_1 === 0 || currentLevelTicks[i_1 - 1].value !== tickValue) {\n levelTicksRemoveDuplicated.push(currentLevelTicks[i_1]);\n\n if (tickValue >= extent[0] && tickValue <= extent[1]) {\n tickCount++;\n }\n }\n }\n\n var targetTickNum = (extent[1] - extent[0]) / approxInterval; // Added too much in this level and not too less in last level\n\n if (tickCount > targetTickNum * 1.5 && lastLevelTickCount > targetTickNum / 1.5) {\n break;\n } // Only treat primary time unit as one level.\n\n\n levelsTicks.push(levelTicksRemoveDuplicated);\n\n if (tickCount > targetTickNum || bottomUnitName === unitNames[i]) {\n break;\n }\n } // Reset if next unitName is primary\n\n\n currentLevelTicks = [];\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (iter >= safeLimit) {\n warn('Exceed safe limit.');\n }\n }\n\n var levelsTicksInExtent = filter(map(levelsTicks, function (levelTicks) {\n return filter(levelTicks, function (tick) {\n return tick.value >= extent[0] && tick.value <= extent[1] && !tick.notAdd;\n });\n }), function (levelTicks) {\n return levelTicks.length > 0;\n });\n var ticks = [];\n var maxLevel = levelsTicksInExtent.length - 1;\n\n for (var i = 0; i < levelsTicksInExtent.length; ++i) {\n var levelTicks = levelsTicksInExtent[i];\n\n for (var k = 0; k < levelTicks.length; ++k) {\n ticks.push({\n value: levelTicks[k].value,\n level: maxLevel - i\n });\n }\n }\n\n ticks.sort(function (a, b) {\n return a.value - b.value;\n }); // Remove duplicates\n\n var result = [];\n\n for (var i = 0; i < ticks.length; ++i) {\n if (i === 0 || ticks[i].value !== ticks[i - 1].value) {\n result.push(ticks[i]);\n }\n }\n\n return result;\n}\n\nScale.registerClass(TimeScale);\nexport default TimeScale;","map":{"version":3,"sources":["D:/Work/WorkSpace/GitWorkSpace/TenShop/resource/ElectronicMall/src啊/ElectronicMallVue/node_modules/echarts/lib/scale/Time.js"],"names":["__extends","numberUtil","ONE_SECOND","ONE_MINUTE","ONE_HOUR","ONE_DAY","ONE_YEAR","format","leveledFormat","getUnitValue","timeUnits","fullLeveledFormatter","getPrimaryTimeUnit","isPrimaryTimeUnit","getDefaultFormatPrecisionOfInterval","fullYearGetterName","monthSetterName","fullYearSetterName","dateSetterName","hoursGetterName","hoursSetterName","minutesSetterName","secondsSetterName","millisecondsSetterName","monthGetterName","dateGetterName","minutesGetterName","secondsGetterName","millisecondsGetterName","scaleHelper","IntervalScale","Scale","warn","filter","isNumber","map","bisect","a","x","lo","hi","mid","TimeScale","_super","settings","_this","call","type","prototype","getLabel","tick","useUTC","getSetting","value","_minLevelUnit","second","getFormattedLabel","idx","labelFormatter","isUTC","lang","getTicks","interval","_interval","extent","_extent","ticks","push","level","innerTicks","getIntervalTicks","_approxInterval","concat","calcNiceExtent","opt","Infinity","d","Date","getFullYear","getMonth","getDate","calcNiceTicks","splitNumber","minInterval","maxInterval","approxTickNum","span","scaleIntervalsLen","scaleIntervals","length","Math","min","max","parse","val","parseDate","contain","normalize","scale","isUnitValueSame","unit","valueA","valueB","dateA","dateB","isSame","isSameYear","isSameMonth","isSameDay","isSameHour","isSameMinute","isSameSecond","isSameMilliSecond","getDateInterval","approxInterval","daysInMonth","getMonthInterval","APPROX_ONE_MONTH","getHourInterval","getMinutesAndSecondsInterval","isMinutes","getMillisecondsInterval","nice","getFirstTimestampOfUnit","date","unitName","outDate","getTime","bottomUnitName","safeLimit","unitNames","iter","addTicksInSpan","minTimestamp","maxTimestamp","getMethodName","setMethodName","isDate","out","dateTime","notAdd","addLevelTicks","lastLevelTicks","levelTicks","newAddedTicks","isFirstLevel","i","startTick","endTick","getterName","setterName","round","unshift","levelsTicks","currentLevelTicks","tickCount","lastLevelTickCount","primaryTimeUnit","nextPrimaryTimeUnit","sort","b","levelTicksRemoveDuplicated","i_1","tickValue","targetTickNum","process","env","NODE_ENV","levelsTicksInExtent","maxLevel","k","result","registerClass"],"mappings":"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","sourcesContent":["\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/*\n* A third-party license is embedded for some of the code in this file:\n* The \"scaleLevels\" was originally copied from \"d3.js\" with some\n* modifications made for this project.\n* (See more details in the comment on the definition of \"scaleLevels\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\n// [About UTC and local time zone]:\n// In most cases, `number.parseDate` will treat input data string as local time\n// (except time zone is specified in time string). And `format.formateTime` returns\n// local time by default. option.useUTC is false by default. This design has\n// considered these common cases:\n// (1) Time that is persistent in server is in UTC, but it is needed to be displayed\n// in local time by default.\n// (2) By default, the input data string (e.g., '2011-01-02') should be displayed\n// as its original time, without any time difference.\n\nimport * as numberUtil from '../util/number.js';\nimport { ONE_SECOND, ONE_MINUTE, ONE_HOUR, ONE_DAY, ONE_YEAR, format, leveledFormat, getUnitValue, timeUnits, fullLeveledFormatter, getPrimaryTimeUnit, isPrimaryTimeUnit, getDefaultFormatPrecisionOfInterval, fullYearGetterName, monthSetterName, fullYearSetterName, dateSetterName, hoursGetterName, hoursSetterName, minutesSetterName, secondsSetterName, millisecondsSetterName, monthGetterName, dateGetterName, minutesGetterName, secondsGetterName, millisecondsGetterName } from '../util/time.js';\nimport * as scaleHelper from './helper.js';\nimport IntervalScale from './Interval.js';\nimport Scale from './Scale.js';\nimport { warn } from '../util/log.js';\nimport { filter, isNumber, map } from 'zrender/lib/core/util.js'; // FIXME 公用?\n\nvar bisect = function (a, x, lo, hi) {\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n\n if (a[mid][1] < x) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n return lo;\n};\n\nvar TimeScale =\n/** @class */\nfunction (_super) {\n __extends(TimeScale, _super);\n\n function TimeScale(settings) {\n var _this = _super.call(this, settings) || this;\n\n _this.type = 'time';\n return _this;\n }\n /**\n * Get label is mainly for other components like dataZoom, tooltip.\n */\n\n\n TimeScale.prototype.getLabel = function (tick) {\n var useUTC = this.getSetting('useUTC');\n return format(tick.value, fullLeveledFormatter[getDefaultFormatPrecisionOfInterval(getPrimaryTimeUnit(this._minLevelUnit))] || fullLeveledFormatter.second, useUTC, this.getSetting('locale'));\n };\n\n TimeScale.prototype.getFormattedLabel = function (tick, idx, labelFormatter) {\n var isUTC = this.getSetting('useUTC');\n var lang = this.getSetting('locale');\n return leveledFormat(tick, idx, labelFormatter, lang, isUTC);\n };\n /**\n * @override\n */\n\n\n TimeScale.prototype.getTicks = function () {\n var interval = this._interval;\n var extent = this._extent;\n var ticks = []; // If interval is 0, return [];\n\n if (!interval) {\n return ticks;\n }\n\n ticks.push({\n value: extent[0],\n level: 0\n });\n var useUTC = this.getSetting('useUTC');\n var innerTicks = getIntervalTicks(this._minLevelUnit, this._approxInterval, useUTC, extent);\n ticks = ticks.concat(innerTicks);\n ticks.push({\n value: extent[1],\n level: 0\n });\n return ticks;\n };\n\n TimeScale.prototype.calcNiceExtent = function (opt) {\n var extent = this._extent; // If extent start and end are same, expand them\n\n if (extent[0] === extent[1]) {\n // Expand extent\n extent[0] -= ONE_DAY;\n extent[1] += ONE_DAY;\n } // If there are no data and extent are [Infinity, -Infinity]\n\n\n if (extent[1] === -Infinity && extent[0] === Infinity) {\n var d = new Date();\n extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate());\n extent[0] = extent[1] - ONE_DAY;\n }\n\n this.calcNiceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);\n };\n\n TimeScale.prototype.calcNiceTicks = function (approxTickNum, minInterval, maxInterval) {\n approxTickNum = approxTickNum || 10;\n var extent = this._extent;\n var span = extent[1] - extent[0];\n this._approxInterval = span / approxTickNum;\n\n if (minInterval != null && this._approxInterval < minInterval) {\n this._approxInterval = minInterval;\n }\n\n if (maxInterval != null && this._approxInterval > maxInterval) {\n this._approxInterval = maxInterval;\n }\n\n var scaleIntervalsLen = scaleIntervals.length;\n var idx = Math.min(bisect(scaleIntervals, this._approxInterval, 0, scaleIntervalsLen), scaleIntervalsLen - 1); // Interval that can be used to calculate ticks\n\n this._interval = scaleIntervals[idx][1]; // Min level used when picking ticks from top down.\n // We check one more level to avoid the ticks are to sparse in some case.\n\n this._minLevelUnit = scaleIntervals[Math.max(idx - 1, 0)][0];\n };\n\n TimeScale.prototype.parse = function (val) {\n // val might be float.\n return isNumber(val) ? val : +numberUtil.parseDate(val);\n };\n\n TimeScale.prototype.contain = function (val) {\n return scaleHelper.contain(this.parse(val), this._extent);\n };\n\n TimeScale.prototype.normalize = function (val) {\n return scaleHelper.normalize(this.parse(val), this._extent);\n };\n\n TimeScale.prototype.scale = function (val) {\n return scaleHelper.scale(val, this._extent);\n };\n\n TimeScale.type = 'time';\n return TimeScale;\n}(IntervalScale);\n/**\n * This implementation was originally copied from \"d3.js\"\n * <https://github.com/d3/d3/blob/b516d77fb8566b576088e73410437494717ada26/src/time/scale.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n */\n\n\nvar scaleIntervals = [// Format interval\n['second', ONE_SECOND], ['minute', ONE_MINUTE], ['hour', ONE_HOUR], ['quarter-day', ONE_HOUR * 6], ['half-day', ONE_HOUR * 12], ['day', ONE_DAY * 1.2], ['half-week', ONE_DAY * 3.5], ['week', ONE_DAY * 7], ['month', ONE_DAY * 31], ['quarter', ONE_DAY * 95], ['half-year', ONE_YEAR / 2], ['year', ONE_YEAR] // 1Y\n];\n\nfunction isUnitValueSame(unit, valueA, valueB, isUTC) {\n var dateA = numberUtil.parseDate(valueA);\n var dateB = numberUtil.parseDate(valueB);\n\n var isSame = function (unit) {\n return getUnitValue(dateA, unit, isUTC) === getUnitValue(dateB, unit, isUTC);\n };\n\n var isSameYear = function () {\n return isSame('year');\n }; // const isSameHalfYear = () => isSameYear() && isSame('half-year');\n // const isSameQuater = () => isSameYear() && isSame('quarter');\n\n\n var isSameMonth = function () {\n return isSameYear() && isSame('month');\n };\n\n var isSameDay = function () {\n return isSameMonth() && isSame('day');\n }; // const isSameHalfDay = () => isSameDay() && isSame('half-day');\n\n\n var isSameHour = function () {\n return isSameDay() && isSame('hour');\n };\n\n var isSameMinute = function () {\n return isSameHour() && isSame('minute');\n };\n\n var isSameSecond = function () {\n return isSameMinute() && isSame('second');\n };\n\n var isSameMilliSecond = function () {\n return isSameSecond() && isSame('millisecond');\n };\n\n switch (unit) {\n case 'year':\n return isSameYear();\n\n case 'month':\n return isSameMonth();\n\n case 'day':\n return isSameDay();\n\n case 'hour':\n return isSameHour();\n\n case 'minute':\n return isSameMinute();\n\n case 'second':\n return isSameSecond();\n\n case 'millisecond':\n return isSameMilliSecond();\n }\n} // const primaryUnitGetters = {\n// year: fullYearGetterName(),\n// month: monthGetterName(),\n// day: dateGetterName(),\n// hour: hoursGetterName(),\n// minute: minutesGetterName(),\n// second: secondsGetterName(),\n// millisecond: millisecondsGetterName()\n// };\n// const primaryUnitUTCGetters = {\n// year: fullYearGetterName(true),\n// month: monthGetterName(true),\n// day: dateGetterName(true),\n// hour: hoursGetterName(true),\n// minute: minutesGetterName(true),\n// second: secondsGetterName(true),\n// millisecond: millisecondsGetterName(true)\n// };\n// function moveTick(date: Date, unitName: TimeUnit, step: number, isUTC: boolean) {\n// step = step || 1;\n// switch (getPrimaryTimeUnit(unitName)) {\n// case 'year':\n// date[fullYearSetterName(isUTC)](date[fullYearGetterName(isUTC)]() + step);\n// break;\n// case 'month':\n// date[monthSetterName(isUTC)](date[monthGetterName(isUTC)]() + step);\n// break;\n// case 'day':\n// date[dateSetterName(isUTC)](date[dateGetterName(isUTC)]() + step);\n// break;\n// case 'hour':\n// date[hoursSetterName(isUTC)](date[hoursGetterName(isUTC)]() + step);\n// break;\n// case 'minute':\n// date[minutesSetterName(isUTC)](date[minutesGetterName(isUTC)]() + step);\n// break;\n// case 'second':\n// date[secondsSetterName(isUTC)](date[secondsGetterName(isUTC)]() + step);\n// break;\n// case 'millisecond':\n// date[millisecondsSetterName(isUTC)](date[millisecondsGetterName(isUTC)]() + step);\n// break;\n// }\n// return date.getTime();\n// }\n// const DATE_INTERVALS = [[8, 7.5], [4, 3.5], [2, 1.5]];\n// const MONTH_INTERVALS = [[6, 5.5], [3, 2.5], [2, 1.5]];\n// const MINUTES_SECONDS_INTERVALS = [[30, 30], [20, 20], [15, 15], [10, 10], [5, 5], [2, 2]];\n\n\nfunction getDateInterval(approxInterval, daysInMonth) {\n approxInterval /= ONE_DAY;\n return approxInterval > 16 ? 16 // Math.floor(daysInMonth / 2) + 1 // In this case we only want one tick between two months.\n : approxInterval > 7.5 ? 7 // TODO week 7 or day 8?\n : approxInterval > 3.5 ? 4 : approxInterval > 1.5 ? 2 : 1;\n}\n\nfunction getMonthInterval(approxInterval) {\n var APPROX_ONE_MONTH = 30 * ONE_DAY;\n approxInterval /= APPROX_ONE_MONTH;\n return approxInterval > 6 ? 6 : approxInterval > 3 ? 3 : approxInterval > 2 ? 2 : 1;\n}\n\nfunction getHourInterval(approxInterval) {\n approxInterval /= ONE_HOUR;\n return approxInterval > 12 ? 12 : approxInterval > 6 ? 6 : approxInterval > 3.5 ? 4 : approxInterval > 2 ? 2 : 1;\n}\n\nfunction getMinutesAndSecondsInterval(approxInterval, isMinutes) {\n approxInterval /= isMinutes ? ONE_MINUTE : ONE_SECOND;\n return approxInterval > 30 ? 30 : approxInterval > 20 ? 20 : approxInterval > 15 ? 15 : approxInterval > 10 ? 10 : approxInterval > 5 ? 5 : approxInterval > 2 ? 2 : 1;\n}\n\nfunction getMillisecondsInterval(approxInterval) {\n return numberUtil.nice(approxInterval, true);\n}\n\nfunction getFirstTimestampOfUnit(date, unitName, isUTC) {\n var outDate = new Date(date);\n\n switch (getPrimaryTimeUnit(unitName)) {\n case 'year':\n case 'month':\n outDate[monthSetterName(isUTC)](0);\n\n case 'day':\n outDate[dateSetterName(isUTC)](1);\n\n case 'hour':\n outDate[hoursSetterName(isUTC)](0);\n\n case 'minute':\n outDate[minutesSetterName(isUTC)](0);\n\n case 'second':\n outDate[secondsSetterName(isUTC)](0);\n outDate[millisecondsSetterName(isUTC)](0);\n }\n\n return outDate.getTime();\n}\n\nfunction getIntervalTicks(bottomUnitName, approxInterval, isUTC, extent) {\n var safeLimit = 10000;\n var unitNames = timeUnits;\n var iter = 0;\n\n function addTicksInSpan(interval, minTimestamp, maxTimestamp, getMethodName, setMethodName, isDate, out) {\n var date = new Date(minTimestamp);\n var dateTime = minTimestamp;\n var d = date[getMethodName](); // if (isDate) {\n // d -= 1; // Starts with 0; PENDING\n // }\n\n while (dateTime < maxTimestamp && dateTime <= extent[1]) {\n out.push({\n value: dateTime\n });\n d += interval;\n date[setMethodName](d);\n dateTime = date.getTime();\n } // This extra tick is for calcuating ticks of next level. Will not been added to the final result\n\n\n out.push({\n value: dateTime,\n notAdd: true\n });\n }\n\n function addLevelTicks(unitName, lastLevelTicks, levelTicks) {\n var newAddedTicks = [];\n var isFirstLevel = !lastLevelTicks.length;\n\n if (isUnitValueSame(getPrimaryTimeUnit(unitName), extent[0], extent[1], isUTC)) {\n return;\n }\n\n if (isFirstLevel) {\n lastLevelTicks = [{\n // TODO Optimize. Not include so may ticks.\n value: getFirstTimestampOfUnit(new Date(extent[0]), unitName, isUTC)\n }, {\n value: extent[1]\n }];\n }\n\n for (var i = 0; i < lastLevelTicks.length - 1; i++) {\n var startTick = lastLevelTicks[i].value;\n var endTick = lastLevelTicks[i + 1].value;\n\n if (startTick === endTick) {\n continue;\n }\n\n var interval = void 0;\n var getterName = void 0;\n var setterName = void 0;\n var isDate = false;\n\n switch (unitName) {\n case 'year':\n interval = Math.max(1, Math.round(approxInterval / ONE_DAY / 365));\n getterName = fullYearGetterName(isUTC);\n setterName = fullYearSetterName(isUTC);\n break;\n\n case 'half-year':\n case 'quarter':\n case 'month':\n interval = getMonthInterval(approxInterval);\n getterName = monthGetterName(isUTC);\n setterName = monthSetterName(isUTC);\n break;\n\n case 'week': // PENDING If week is added. Ignore day.\n\n case 'half-week':\n case 'day':\n interval = getDateInterval(approxInterval, 31); // Use 32 days and let interval been 16\n\n getterName = dateGetterName(isUTC);\n setterName = dateSetterName(isUTC);\n isDate = true;\n break;\n\n case 'half-day':\n case 'quarter-day':\n case 'hour':\n interval = getHourInterval(approxInterval);\n getterName = hoursGetterName(isUTC);\n setterName = hoursSetterName(isUTC);\n break;\n\n case 'minute':\n interval = getMinutesAndSecondsInterval(approxInterval, true);\n getterName = minutesGetterName(isUTC);\n setterName = minutesSetterName(isUTC);\n break;\n\n case 'second':\n interval = getMinutesAndSecondsInterval(approxInterval, false);\n getterName = secondsGetterName(isUTC);\n setterName = secondsSetterName(isUTC);\n break;\n\n case 'millisecond':\n interval = getMillisecondsInterval(approxInterval);\n getterName = millisecondsGetterName(isUTC);\n setterName = millisecondsSetterName(isUTC);\n break;\n }\n\n addTicksInSpan(interval, startTick, endTick, getterName, setterName, isDate, newAddedTicks);\n\n if (unitName === 'year' && levelTicks.length > 1 && i === 0) {\n // Add nearest years to the left extent.\n levelTicks.unshift({\n value: levelTicks[0].value - interval\n });\n }\n }\n\n for (var i = 0; i < newAddedTicks.length; i++) {\n levelTicks.push(newAddedTicks[i]);\n } // newAddedTicks.length && console.log(unitName, newAddedTicks);\n\n\n return newAddedTicks;\n }\n\n var levelsTicks = [];\n var currentLevelTicks = [];\n var tickCount = 0;\n var lastLevelTickCount = 0;\n\n for (var i = 0; i < unitNames.length && iter++ < safeLimit; ++i) {\n var primaryTimeUnit = getPrimaryTimeUnit(unitNames[i]);\n\n if (!isPrimaryTimeUnit(unitNames[i])) {\n // TODO\n continue;\n }\n\n addLevelTicks(unitNames[i], levelsTicks[levelsTicks.length - 1] || [], currentLevelTicks);\n var nextPrimaryTimeUnit = unitNames[i + 1] ? getPrimaryTimeUnit(unitNames[i + 1]) : null;\n\n if (primaryTimeUnit !== nextPrimaryTimeUnit) {\n if (currentLevelTicks.length) {\n lastLevelTickCount = tickCount; // Remove the duplicate so the tick count can be precisely.\n\n currentLevelTicks.sort(function (a, b) {\n return a.value - b.value;\n });\n var levelTicksRemoveDuplicated = [];\n\n for (var i_1 = 0; i_1 < currentLevelTicks.length; ++i_1) {\n var tickValue = currentLevelTicks[i_1].value;\n\n if (i_1 === 0 || currentLevelTicks[i_1 - 1].value !== tickValue) {\n levelTicksRemoveDuplicated.push(currentLevelTicks[i_1]);\n\n if (tickValue >= extent[0] && tickValue <= extent[1]) {\n tickCount++;\n }\n }\n }\n\n var targetTickNum = (extent[1] - extent[0]) / approxInterval; // Added too much in this level and not too less in last level\n\n if (tickCount > targetTickNum * 1.5 && lastLevelTickCount > targetTickNum / 1.5) {\n break;\n } // Only treat primary time unit as one level.\n\n\n levelsTicks.push(levelTicksRemoveDuplicated);\n\n if (tickCount > targetTickNum || bottomUnitName === unitNames[i]) {\n break;\n }\n } // Reset if next unitName is primary\n\n\n currentLevelTicks = [];\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (iter >= safeLimit) {\n warn('Exceed safe limit.');\n }\n }\n\n var levelsTicksInExtent = filter(map(levelsTicks, function (levelTicks) {\n return filter(levelTicks, function (tick) {\n return tick.value >= extent[0] && tick.value <= extent[1] && !tick.notAdd;\n });\n }), function (levelTicks) {\n return levelTicks.length > 0;\n });\n var ticks = [];\n var maxLevel = levelsTicksInExtent.length - 1;\n\n for (var i = 0; i < levelsTicksInExtent.length; ++i) {\n var levelTicks = levelsTicksInExtent[i];\n\n for (var k = 0; k < levelTicks.length; ++k) {\n ticks.push({\n value: levelTicks[k].value,\n level: maxLevel - i\n });\n }\n }\n\n ticks.sort(function (a, b) {\n return a.value - b.value;\n }); // Remove duplicates\n\n var result = [];\n\n for (var i = 0; i < ticks.length; ++i) {\n if (i === 0 || ticks[i].value !== ticks[i - 1].value) {\n result.push(ticks[i]);\n }\n }\n\n return result;\n}\n\nScale.registerClass(TimeScale);\nexport default TimeScale;"]},"metadata":{},"sourceType":"module"} |