123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706 |
- (function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define([], factory);
- else if(typeof exports === 'object')
- exports["scale"] = factory();
- else
- root["scale"] = factory();
- })(typeof self !== 'undefined' ? self : this, function() {
- return /******/ (function(modules) { // webpackBootstrap
- /******/ // The module cache
- /******/ var installedModules = {};
- /******/
- /******/ // The require function
- /******/ function __webpack_require__(moduleId) {
- /******/
- /******/ // Check if module is in cache
- /******/ if(installedModules[moduleId]) {
- /******/ return installedModules[moduleId].exports;
- /******/ }
- /******/ // Create a new module (and put it into the cache)
- /******/ var module = installedModules[moduleId] = {
- /******/ i: moduleId,
- /******/ l: false,
- /******/ exports: {}
- /******/ };
- /******/
- /******/ // Execute the module function
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
- /******/
- /******/ // Flag the module as loaded
- /******/ module.l = true;
- /******/
- /******/ // Return the exports of the module
- /******/ return module.exports;
- /******/ }
- /******/
- /******/
- /******/ // expose the modules object (__webpack_modules__)
- /******/ __webpack_require__.m = modules;
- /******/
- /******/ // expose the module cache
- /******/ __webpack_require__.c = installedModules;
- /******/
- /******/ // define getter function for harmony exports
- /******/ __webpack_require__.d = function(exports, name, getter) {
- /******/ if(!__webpack_require__.o(exports, name)) {
- /******/ Object.defineProperty(exports, name, {
- /******/ configurable: false,
- /******/ enumerable: true,
- /******/ get: getter
- /******/ });
- /******/ }
- /******/ };
- /******/
- /******/ // getDefaultExport function for compatibility with non-harmony modules
- /******/ __webpack_require__.n = function(module) {
- /******/ var getter = module && module.__esModule ?
- /******/ function getDefault() { return module['default']; } :
- /******/ function getModuleExports() { return module; };
- /******/ __webpack_require__.d(getter, 'a', getter);
- /******/ return getter;
- /******/ };
- /******/
- /******/ // Object.prototype.hasOwnProperty.call
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
- /******/
- /******/ // __webpack_public_path__
- /******/ __webpack_require__.p = "";
- /******/
- /******/ // Load entry module and return exports
- /******/ return __webpack_require__(__webpack_require__.s = 13);
- /******/ })
- /************************************************************************/
- /******/ ([
- /* 0 */
- /***/ (function(module, exports, __webpack_require__) {
- var mix = __webpack_require__(16);
- var each = __webpack_require__(1);
- var isObject = __webpack_require__(7);
- var isNil = __webpack_require__(2);
- var Scale =
- /*#__PURE__*/
- function () {
- var _proto = Scale.prototype;
- _proto._initDefaultCfg = function _initDefaultCfg() {
- this.type = 'base';
- /**
- * 格式化函数,输出文本或者tick时的格式化函数
- * @type {Function}
- */
- this.formatter = null;
- /**
- * 输出的值域
- * @type {Array}
- */
- this.range = [0, 1];
- /**
- * 度量的标记
- * @type {Array}
- */
- this.ticks = null;
- /**
- * 参与度量计算的值,可选项
- * @type {Array}
- */
- this.values = [];
- };
- function Scale(cfg) {
- this._initDefaultCfg();
- mix(this, cfg);
- this.init();
- }
- /**
- * 度量初始化
- * @protected
- */
- _proto.init = function init() {}
- /**
- * 获取该度量的ticks,返回的是多个对象,
- * - text: tick 的文本
- * - value: 对应的度量转换后的值
- * <code>
- * [
- * {text: 0,value:0}
- * {text: 1,value:0.2}
- * {text: 2,value:0.4}
- * {text: 3,value:0.6}
- * {text: 4,value:0.8}
- * {text: 5,value:1}
- * ]
- * </code>
- * @param {Number} count 输出tick的个数的近似值,默认是 10
- * @return {Array} 返回 ticks 数组
- */
- ;
- _proto.getTicks = function getTicks() {
- var self = this;
- var ticks = self.ticks;
- var rst = [];
- each(ticks, function (tick) {
- var obj;
- if (isObject(tick)) {
- obj = tick;
- } else {
- obj = {
- text: self.getText(tick),
- tickValue: tick,
- value: self.scale(tick)
- };
- }
- rst.push(obj);
- });
- return rst;
- }
- /**
- * 获取格式化后的文本
- * @param {*} value 输入的数据
- * @param {*} key 字段的 key
- * @return {String} 格式化的文本
- */
- ;
- _proto.getText = function getText(value, key) {
- var formatter = this.formatter;
- value = formatter ? formatter(value, key) : value;
- if (isNil(value) || !value.toString) {
- value = '';
- }
- return value.toString();
- }
- /**
- * 输出的值域最小值
- * @protected
- * @return {Number} 返回最小的值
- */
- ;
- _proto.rangeMin = function rangeMin() {
- return this.range[0];
- }
- /**
- * 输出的值域最大值
- * @protected
- * @return {Number} 返回最大的值
- */
- ;
- _proto.rangeMax = function rangeMax() {
- var range = this.range;
- return range[range.length - 1];
- }
- /**
- * 度量转换后的结果,翻转回输入域
- * @param {Number} value 需要翻转的数值
- * @return {*} 度量的输入值
- */
- ;
- _proto.invert = function invert(value) {
- return value;
- }
- /**
- * 将传入的值从非数值转换成数值格式,如分类字符串、时间字符串等
- * @param {*} value 传入的值
- * @return {Number} 转换的值
- */
- ;
- _proto.translate = function translate(value) {
- return value;
- }
- /**
- * 进行度量转换
- * @param {*} value 输入值
- * @return {Number} 输出值,在设定的输出值域之间,默认[0,1]
- */
- ;
- _proto.scale = function scale(value) {
- return value;
- }
- /**
- * 克隆一个新的scale,拥有跟当前scale相同的输入域、输出域等
- * @return {Scale} 克隆的度量
- */
- ;
- _proto.clone = function clone() {
- var self = this;
- var constr = self.constructor;
- var cfg = {};
- each(self, function (v, k) {
- cfg[k] = self[k];
- });
- return new constr(cfg);
- }
- /**
- * 更改度量的属性信息
- * @param {Object} info 属性信息
- * @chainable
- * @return {Scale} 返回自身的引用
- */
- ;
- _proto.change = function change(info) {
- this.ticks = null;
- mix(this, info);
- this.init();
- return this;
- };
- return Scale;
- }();
- module.exports = Scale;
- /***/ }),
- /* 1 */
- /***/ (function(module, exports, __webpack_require__) {
- var isObject = __webpack_require__(7);
- var isArray = __webpack_require__(17);
- var each = function each(elements, func) {
- if (!elements) {
- return;
- }
- var rst = void 0;
- if (isArray(elements)) {
- for (var i = 0, len = elements.length; i < len; i++) {
- rst = func(elements[i], i);
- if (rst === false) {
- break;
- }
- }
- } else if (isObject(elements)) {
- for (var k in elements) {
- if (elements.hasOwnProperty(k)) {
- rst = func(elements[k], k);
- if (rst === false) {
- break;
- }
- }
- }
- }
- };
- module.exports = each;
- /***/ }),
- /* 2 */
- /***/ (function(module, exports) {
- // isFinite,
- var isNil = function isNil(value) {
- /**
- * isNil(null) => true
- * isNil() => true
- */
- return value === null || value === undefined;
- };
- module.exports = isNil;
- /***/ }),
- /* 3 */
- /***/ (function(module, exports) {
- var toString = {}.toString;
- var isType = function isType(value, type) {
- return toString.call(value) === '[object ' + type + ']';
- };
- module.exports = isType;
- /***/ }),
- /* 4 */
- /***/ (function(module, exports, __webpack_require__) {
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
- /**
- * @fileOverview The measurement of linear data scale function
- * @author dxq613@gmail.com
- */
- var isNil = __webpack_require__(2);
- var each = __webpack_require__(1);
- var Base = __webpack_require__(0);
- var numberAuto = __webpack_require__(18);
- /**
- * 线性度量
- * @class Scale.Linear
- */
- var Linear =
- /*#__PURE__*/
- function (_Base) {
- _inheritsLoose(Linear, _Base);
- function Linear() {
- return _Base.apply(this, arguments) || this;
- }
- var _proto = Linear.prototype;
- _proto._initDefaultCfg = function _initDefaultCfg() {
- _Base.prototype._initDefaultCfg.call(this);
- var self = this;
- self.type = 'linear';
- self.isLinear = true;
- /**
- * 是否为了用户习惯,优化min,max和ticks,如果进行优化,则会根据生成的ticks调整min,max,否则舍弃(min,max)范围之外的ticks
- * @type {Boolean}
- * @default false
- */
- self.nice = false;
- /**
- * min value of the scale
- * @type {Number}
- * @default null
- */
- self.min = null;
- /**
- * min value limitted of the scale
- * @type {Number}
- * @default null
- */
- self.minLimit = null;
- /**
- * max value of the scale
- * @type {Number}
- * @default null
- */
- self.max = null;
- /**
- * max value limitted of the scale
- * @type {Number}
- * @default null
- */
- self.maxLimit = null;
- /**
- * 自动生成标记时的个数
- * @type {Number}
- * @default null
- */
- self.tickCount = null;
- /**
- * 坐标轴点之间的间距,指的是真实数据的差值
- * @type {Number}
- * @default null
- */
- self.tickInterval = null;
- /**
- * 坐标轴点之间的最小间距,指的是真实数据的差值
- * @type {Number}
- * @default null
- */
- self.minTickInterval = null;
- /**
- * 用于计算坐标点时逼近的数组
- * @type {Array}
- */
- self.snapArray = null;
- }
- /**
- * @protected
- * @override
- */
- ;
- _proto.init = function init() {
- var self = this;
- if (!self.ticks) {
- self.min = self.translate(self.min);
- self.max = self.translate(self.max);
- self.initTicks();
- } else {
- var ticks = self.ticks;
- var firstValue = self.translate(ticks[0]);
- var lastValue = self.translate(ticks[ticks.length - 1]);
- if (isNil(self.min) || self.min > firstValue) {
- self.min = firstValue;
- }
- if (isNil(self.max) || self.max < lastValue) {
- self.max = lastValue;
- }
- }
- }
- /**
- * 计算坐标点
- * @protected
- * @return {Array} 计算完成的坐标点
- */
- ;
- _proto.calculateTicks = function calculateTicks() {
- var min = this.min,
- max = this.max,
- minLimit = this.minLimit,
- maxLimit = this.maxLimit,
- tickCount = this.tickCount,
- tickInterval = this.tickInterval,
- minTickInterval = this.minTickInterval,
- snapArray = this.snapArray;
- if (tickCount === 1) {
- throw new Error('linear scale\'tickCount should not be 1');
- }
- if (max < min) {
- throw new Error("max: " + max + " should not be less than min: " + min);
- }
- var tmp = numberAuto({
- min: min,
- max: max,
- minLimit: minLimit,
- maxLimit: maxLimit,
- minCount: tickCount,
- maxCount: tickCount,
- interval: tickInterval,
- minTickInterval: minTickInterval,
- snapArray: snapArray
- });
- return tmp.ticks;
- } // 初始化ticks
- ;
- _proto.initTicks = function initTicks() {
- var self = this;
- var calTicks = self.calculateTicks();
- if (self.nice) {
- // 如果需要优化显示的tick
- self.ticks = calTicks;
- self.min = calTicks[0];
- self.max = calTicks[calTicks.length - 1];
- } else {
- var ticks = [];
- each(calTicks, function (tick) {
- if (tick >= self.min && tick <= self.max) {
- ticks.push(tick);
- }
- }); // 如果 ticks 为空,直接输入最小值、最大值
- if (!ticks.length) {
- ticks.push(self.min);
- ticks.push(self.max);
- }
- self.ticks = ticks;
- }
- }
- /**
- * @override
- */
- ;
- _proto.scale = function scale(value) {
- if (isNil(value)) {
- return NaN;
- }
- var max = this.max;
- var min = this.min;
- if (max === min) {
- return 0;
- }
- var percent = (value - min) / (max - min);
- var rangeMin = this.rangeMin();
- var rangeMax = this.rangeMax();
- return rangeMin + percent * (rangeMax - rangeMin);
- }
- /**
- * @override
- */
- ;
- _proto.invert = function invert(value) {
- var percent = (value - this.rangeMin()) / (this.rangeMax() - this.rangeMin());
- return this.min + percent * (this.max - this.min);
- };
- return Linear;
- }(Base);
- Base.Linear = Linear;
- module.exports = Linear;
- /***/ }),
- /* 5 */
- /***/ (function(module, exports, __webpack_require__) {
- /**
- * 判断是否数字
- * @return {Boolean} 是否数字
- */
- var isType = __webpack_require__(3);
- var isNumber = function isNumber(value) {
- return isType(value, 'Number');
- };
- module.exports = isNumber;
- /***/ }),
- /* 6 */
- /***/ (function(module, exports, __webpack_require__) {
- var isType = __webpack_require__(3);
- var isString = function isString(str) {
- return isType(str, 'String');
- };
- module.exports = isString;
- /***/ }),
- /* 7 */
- /***/ (function(module, exports) {
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
- return typeof obj;
- } : function (obj) {
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
- };
- var isObject = function isObject(value) {
- /**
- * isObject({}) => true
- * isObject([1, 2, 3]) => true
- * isObject(Function) => true
- * isObject(null) => false
- */
- var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);
- return value !== null && type === 'object' || type === 'function';
- };
- module.exports = isObject;
- /***/ }),
- /* 8 */
- /***/ (function(module, exports) {
- /**
- * @fileOverview 计算方法
- * @author dxq613@gmail.com
- */
- // 如果小数点后面超过 10 位浮点数时进行一下处理
- var DECIMAL_LENGTH = 12; // 获取系数
- function getFactor(v) {
- var factor = 1;
- if (v === Infinity || v === -Infinity) {
- throw new Error('Not support Infinity!');
- }
- if (v < 1) {
- var count = 0;
- while (v < 1) {
- factor = factor / 10;
- v = v * 10;
- count++;
- } // 浮点数计算出现问题
- if (factor.toString().length > DECIMAL_LENGTH) {
- factor = parseFloat(factor.toFixed(count));
- }
- } else {
- while (v > 10) {
- factor = factor * 10;
- v = v / 10;
- }
- }
- return factor;
- } // 取小于当前值的
- function arrayFloor(values, value) {
- var length = values.length;
- if (length === 0) {
- return NaN;
- }
- var pre = values[0];
- if (value < values[0]) {
- return NaN;
- }
- if (value >= values[length - 1]) {
- return values[length - 1];
- }
- for (var i = 1; i < values.length; i++) {
- if (value < values[i]) {
- break;
- }
- pre = values[i];
- }
- return pre;
- } // 大于当前值的第一个
- function arrayCeiling(values, value) {
- var length = values.length;
- if (length === 0) {
- return NaN;
- } // var pre = values[0];
- var rst;
- if (value > values[length - 1]) {
- return NaN;
- }
- if (value < values[0]) {
- return values[0];
- }
- for (var i = 1; i < values.length; i++) {
- if (value <= values[i]) {
- rst = values[i];
- break;
- }
- }
- return rst;
- }
- var Util = {
- // 获取逼近的数值
- snapFactorTo: function snapFactorTo(v, arr, snapType) {
- // 假设 v = -512,isFloor = true
- if (isNaN(v)) {
- return NaN;
- }
- var factor = 1; // 计算系数
- if (v !== 0) {
- if (v < 0) {
- factor = -1;
- }
- v = v * factor; // v = 512
- var tmpFactor = getFactor(v);
- factor = factor * tmpFactor; // factor = -100
- v = v / tmpFactor; // v = 5.12
- }
- if (snapType === 'floor') {
- v = Util.snapFloor(arr, v); // v = 5
- } else if (snapType === 'ceil') {
- v = Util.snapCeiling(arr, v); // v = 6
- } else {
- v = Util.snapTo(arr, v); // 四舍五入 5
- }
- var rst = parseFloat((v * factor).toPrecision(DECIMAL_LENGTH)); // 如果出现浮点数计算问题,需要处理一下
- // 如果出现浮点数计算问题,需要处理一下
- if (Math.abs(factor) < 1 && rst.toString().length > DECIMAL_LENGTH) {
- var decimalVal = parseInt(1 / factor);
- var symbol = factor > 0 ? 1 : -1;
- rst = v / decimalVal * symbol;
- }
- return rst;
- },
- // 获取逼近的倍数
- snapMultiple: function snapMultiple(v, base, snapType) {
- var div;
- if (snapType === 'ceil') {
- div = Math.ceil(v / base);
- } else if (snapType === 'floor') {
- div = Math.floor(v / base);
- } else {
- div = Math.round(v / base);
- }
- return div * base;
- },
- /**
- * 获取逼近的值,用于对齐数据
- * @param {Array} values 数据集合
- * @param {Number} value 数值
- * @return {Number} 逼近的值
- */
- snapTo: function snapTo(values, value) {
- // 这里假定values是升序排列
- var floorVal = arrayFloor(values, value);
- var ceilingVal = arrayCeiling(values, value);
- if (isNaN(floorVal) || isNaN(ceilingVal)) {
- if (values[0] >= value) {
- return values[0];
- }
- var last = values[values.length - 1];
- if (last <= value) {
- return last;
- }
- }
- if (Math.abs(value - floorVal) < Math.abs(ceilingVal - value)) {
- return floorVal;
- }
- return ceilingVal;
- },
- /**
- * 获取逼近的最小值,用于对齐数据
- * @param {Array} values 数据集合
- * @param {Number} value 数值
- * @return {Number} 逼近的最小值
- */
- snapFloor: function snapFloor(values, value) {
- // 这里假定values是升序排列
- return arrayFloor(values, value);
- },
- /**
- * 获取逼近的最大值,用于对齐数据
- * @param {Array} values 数据集合
- * @param {Number} value 数值
- * @return {Number} 逼近的最大值
- */
- snapCeiling: function snapCeiling(values, value) {
- // 这里假定values是升序排列
- return arrayCeiling(values, value);
- },
- fixedBase: function fixedBase(v, base) {
- var str = base.toString();
- var index = str.indexOf('.');
- var indexOfExp = str.indexOf('e-'); // 判断是否带小数点,1.000001 1.23e-9
- if (index < 0 && indexOfExp < 0) {
- // base为整数
- return Math.round(v);
- }
- var length = indexOfExp >= 0 ? parseInt(str.substr(indexOfExp + 2), 10) : str.substr(index + 1).length;
- if (length > 20) {
- length = 20;
- }
- return parseFloat(v.toFixed(length));
- }
- };
- module.exports = Util;
- /***/ }),
- /* 9 */
- /***/ (function(module, exports, __webpack_require__) {
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
- var Base = __webpack_require__(0);
- var catAuto = __webpack_require__(10);
- var each = __webpack_require__(1);
- var isNumber = __webpack_require__(5);
- var isString = __webpack_require__(6);
- var Category =
- /*#__PURE__*/
- function (_Base) {
- _inheritsLoose(Category, _Base);
- function Category() {
- return _Base.apply(this, arguments) || this;
- }
- var _proto = Category.prototype;
- _proto._initDefaultCfg = function _initDefaultCfg() {
- _Base.prototype._initDefaultCfg.call(this);
- this.type = 'cat';
- /**
- * 是否分类度量
- * @type {Boolean}
- */
- this.isCategory = true;
- this.isRounding = true; // 是否进行取整操作
- }
- /**
- * @override
- */
- ;
- _proto.init = function init() {
- var self = this;
- var values = self.values;
- var tickCount = self.tickCount;
- each(values, function (v, i) {
- values[i] = v.toString();
- });
- if (!self.ticks) {
- var ticks = values;
- if (tickCount) {
- var temp = catAuto({
- maxCount: tickCount,
- data: values,
- isRounding: self.isRounding
- });
- ticks = temp.ticks;
- }
- this.ticks = ticks;
- }
- }
- /**
- * @override
- */
- ;
- _proto.getText = function getText(value) {
- if (this.values.indexOf(value) === -1 && isNumber(value)) {
- value = this.values[Math.round(value)];
- }
- return _Base.prototype.getText.call(this, value);
- }
- /**
- * @override
- */
- ;
- _proto.translate = function translate(value) {
- var index = this.values.indexOf(value);
- if (index === -1 && isNumber(value)) {
- index = value;
- } else if (index === -1) {
- index = NaN;
- }
- return index;
- }
- /**
- * @override
- */
- ;
- _proto.scale = function scale(value) {
- var rangeMin = this.rangeMin();
- var rangeMax = this.rangeMax();
- var percent;
- if (isString(value) || this.values.indexOf(value) !== -1) {
- value = this.translate(value);
- }
- if (this.values.length > 1) {
- percent = value / (this.values.length - 1);
- } else {
- percent = value;
- }
- return rangeMin + percent * (rangeMax - rangeMin);
- }
- /**
- * @override
- */
- ;
- _proto.invert = function invert(value) {
- if (isString(value)) {
- // 如果已经是字符串
- return value;
- }
- var min = this.rangeMin();
- var max = this.rangeMax(); // 归一到 范围内
- if (value < min) {
- value = min;
- }
- if (value > max) {
- value = max;
- }
- var percent = (value - min) / (max - min);
- var index = Math.round(percent * (this.values.length - 1)) % this.values.length;
- index = index || 0;
- return this.values[index];
- };
- return Category;
- }(Base);
- Base.Cat = Category;
- module.exports = Category;
- /***/ }),
- /* 10 */
- /***/ (function(module, exports, __webpack_require__) {
- /**
- * @fileOverview 计算分类的的坐标点
- * @author dxq613@gmail.com
- */
- var each = __webpack_require__(1);
- var MAX_COUNT = 8;
- var SUB_COUNT = 4; // 控制个数不能过小
- function getSimpleArray(data) {
- var arr = [];
- each(data, function (sub) {
- arr = arr.concat(sub);
- });
- return arr;
- }
- function getGreatestFactor(count, number) {
- var i;
- for (i = number; i > 0; i--) {
- if (count % i === 0) {
- break;
- }
- } // 如果是素数,没有可以整除的数字
- if (i === 1) {
- for (i = number; i > 0; i--) {
- if ((count - 1) % i === 0) {
- break;
- }
- }
- }
- return i;
- }
- module.exports = function (info) {
- var rst = {};
- var ticks = [];
- var isRounding = info.isRounding;
- var categories = getSimpleArray(info.data);
- var length = categories.length;
- var maxCount = info.maxCount || MAX_COUNT;
- var tickCount;
- if (isRounding) {
- // 取整操作
- tickCount = getGreatestFactor(length - 1, maxCount - 1) + 1; // 如果计算出来只有两个坐标点,则直接使用传入的 maxCount
- if (tickCount === 2) {
- tickCount = maxCount;
- } else if (tickCount < maxCount - SUB_COUNT) {
- tickCount = maxCount - SUB_COUNT;
- }
- } else {
- tickCount = maxCount;
- }
- if (!isRounding && length <= tickCount + tickCount / 2) {
- ticks = [].concat(categories);
- } else {
- var step = parseInt(length / (tickCount - 1), 10);
- var groups = categories.map(function (e, i) {
- return i % step === 0 ? categories.slice(i, i + step) : null;
- }).filter(function (e) {
- return e;
- });
- for (var i = 1, groupLen = groups.length; i < groupLen && (isRounding ? i * step < length - step : i < tickCount - 1); i++) {
- ticks.push(groups[i][0]);
- }
- if (categories.length) {
- ticks.unshift(categories[0]);
- var last = categories[length - 1];
- if (ticks.indexOf(last) === -1) {
- ticks.push(last);
- }
- }
- }
- rst.categories = categories;
- rst.ticks = ticks;
- return rst;
- };
- /***/ }),
- /* 11 */
- /***/ (function(module, exports, __webpack_require__) {
- var __WEBPACK_AMD_DEFINE_RESULT__;(function (main) {
- 'use strict';
- /**
- * Parse or format dates
- * @class fecha
- */
- var fecha = {};
- var token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g;
- var twoDigits = /\d\d?/;
- var threeDigits = /\d{3}/;
- var fourDigits = /\d{4}/;
- var word = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
- var literal = /\[([^]*?)\]/gm;
- var noop = function () {};
- function shorten(arr, sLen) {
- var newArr = [];
- for (var i = 0, len = arr.length; i < len; i++) {
- newArr.push(arr[i].substr(0, sLen));
- }
- return newArr;
- }
- function monthUpdate(arrName) {
- return function (d, v, i18n) {
- var index = i18n[arrName].indexOf(v.charAt(0).toUpperCase() + v.substr(1).toLowerCase());
- if (~index) {
- d.month = index;
- }
- };
- }
- function pad(val, len) {
- val = String(val);
- len = len || 2;
- while (val.length < len) {
- val = '0' + val;
- }
- return val;
- }
- var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
- var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
- var monthNamesShort = shorten(monthNames, 3);
- var dayNamesShort = shorten(dayNames, 3);
- fecha.i18n = {
- dayNamesShort: dayNamesShort,
- dayNames: dayNames,
- monthNamesShort: monthNamesShort,
- monthNames: monthNames,
- amPm: ['am', 'pm'],
- DoFn: function DoFn(D) {
- return D + ['th', 'st', 'nd', 'rd'][D % 10 > 3 ? 0 : (D - D % 10 !== 10) * D % 10];
- }
- };
- var formatFlags = {
- D: function (dateObj) {
- return dateObj.getDate();
- },
- DD: function (dateObj) {
- return pad(dateObj.getDate());
- },
- Do: function (dateObj, i18n) {
- return i18n.DoFn(dateObj.getDate());
- },
- d: function (dateObj) {
- return dateObj.getDay();
- },
- dd: function (dateObj) {
- return pad(dateObj.getDay());
- },
- ddd: function (dateObj, i18n) {
- return i18n.dayNamesShort[dateObj.getDay()];
- },
- dddd: function (dateObj, i18n) {
- return i18n.dayNames[dateObj.getDay()];
- },
- M: function (dateObj) {
- return dateObj.getMonth() + 1;
- },
- MM: function (dateObj) {
- return pad(dateObj.getMonth() + 1);
- },
- MMM: function (dateObj, i18n) {
- return i18n.monthNamesShort[dateObj.getMonth()];
- },
- MMMM: function (dateObj, i18n) {
- return i18n.monthNames[dateObj.getMonth()];
- },
- YY: function (dateObj) {
- return String(dateObj.getFullYear()).substr(2);
- },
- YYYY: function (dateObj) {
- return pad(dateObj.getFullYear(), 4);
- },
- h: function (dateObj) {
- return dateObj.getHours() % 12 || 12;
- },
- hh: function (dateObj) {
- return pad(dateObj.getHours() % 12 || 12);
- },
- H: function (dateObj) {
- return dateObj.getHours();
- },
- HH: function (dateObj) {
- return pad(dateObj.getHours());
- },
- m: function (dateObj) {
- return dateObj.getMinutes();
- },
- mm: function (dateObj) {
- return pad(dateObj.getMinutes());
- },
- s: function (dateObj) {
- return dateObj.getSeconds();
- },
- ss: function (dateObj) {
- return pad(dateObj.getSeconds());
- },
- S: function (dateObj) {
- return Math.round(dateObj.getMilliseconds() / 100);
- },
- SS: function (dateObj) {
- return pad(Math.round(dateObj.getMilliseconds() / 10), 2);
- },
- SSS: function (dateObj) {
- return pad(dateObj.getMilliseconds(), 3);
- },
- a: function (dateObj, i18n) {
- return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];
- },
- A: function (dateObj, i18n) {
- return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();
- },
- ZZ: function (dateObj) {
- var o = dateObj.getTimezoneOffset();
- return (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4);
- }
- };
- var parseFlags = {
- D: [twoDigits, function (d, v) {
- d.day = v;
- }],
- Do: [new RegExp(twoDigits.source + word.source), function (d, v) {
- d.day = parseInt(v, 10);
- }],
- M: [twoDigits, function (d, v) {
- d.month = v - 1;
- }],
- YY: [twoDigits, function (d, v) {
- var da = new Date(),
- cent = +('' + da.getFullYear()).substr(0, 2);
- d.year = '' + (v > 68 ? cent - 1 : cent) + v;
- }],
- h: [twoDigits, function (d, v) {
- d.hour = v;
- }],
- m: [twoDigits, function (d, v) {
- d.minute = v;
- }],
- s: [twoDigits, function (d, v) {
- d.second = v;
- }],
- YYYY: [fourDigits, function (d, v) {
- d.year = v;
- }],
- S: [/\d/, function (d, v) {
- d.millisecond = v * 100;
- }],
- SS: [/\d{2}/, function (d, v) {
- d.millisecond = v * 10;
- }],
- SSS: [threeDigits, function (d, v) {
- d.millisecond = v;
- }],
- d: [twoDigits, noop],
- ddd: [word, noop],
- MMM: [word, monthUpdate('monthNamesShort')],
- MMMM: [word, monthUpdate('monthNames')],
- a: [word, function (d, v, i18n) {
- var val = v.toLowerCase();
- if (val === i18n.amPm[0]) {
- d.isPm = false;
- } else if (val === i18n.amPm[1]) {
- d.isPm = true;
- }
- }],
- ZZ: [/([\+\-]\d\d:?\d\d|Z)/, function (d, v) {
- if (v === 'Z') v = '+00:00';
- var parts = (v + '').match(/([\+\-]|\d\d)/gi),
- minutes;
- if (parts) {
- minutes = +(parts[1] * 60) + parseInt(parts[2], 10);
- d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;
- }
- }]
- };
- parseFlags.dd = parseFlags.d;
- parseFlags.dddd = parseFlags.ddd;
- parseFlags.DD = parseFlags.D;
- parseFlags.mm = parseFlags.m;
- parseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;
- parseFlags.MM = parseFlags.M;
- parseFlags.ss = parseFlags.s;
- parseFlags.A = parseFlags.a; // Some common format strings
- fecha.masks = {
- default: 'ddd MMM DD YYYY HH:mm:ss',
- shortDate: 'M/D/YY',
- mediumDate: 'MMM D, YYYY',
- longDate: 'MMMM D, YYYY',
- fullDate: 'dddd, MMMM D, YYYY',
- shortTime: 'HH:mm',
- mediumTime: 'HH:mm:ss',
- longTime: 'HH:mm:ss.SSS'
- };
- /***
- * Format a date
- * @method format
- * @param {Date|number} dateObj
- * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'
- */
- fecha.format = function (dateObj, mask, i18nSettings) {
- var i18n = i18nSettings || fecha.i18n;
- if (typeof dateObj === 'number') {
- dateObj = new Date(dateObj);
- }
- if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {
- throw new Error('Invalid Date in fecha.format');
- }
- mask = fecha.masks[mask] || mask || fecha.masks['default'];
- var literals = []; // Make literals inactive by replacing them with ??
- mask = mask.replace(literal, function ($0, $1) {
- literals.push($1);
- return '??';
- }); // Apply formatting rules
- mask = mask.replace(token, function ($0) {
- return $0 in formatFlags ? formatFlags[$0](dateObj, i18n) : $0.slice(1, $0.length - 1);
- }); // Inline literal values back into the formatted value
- return mask.replace(/\?\?/g, function () {
- return literals.shift();
- });
- };
- /**
- * Parse a date string into an object, changes - into /
- * @method parse
- * @param {string} dateStr Date string
- * @param {string} format Date parse format
- * @returns {Date|boolean}
- */
- fecha.parse = function (dateStr, format, i18nSettings) {
- var i18n = i18nSettings || fecha.i18n;
- if (typeof format !== 'string') {
- throw new Error('Invalid format in fecha.parse');
- }
- format = fecha.masks[format] || format; // Avoid regular expression denial of service, fail early for really long strings
- // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS
- if (dateStr.length > 1000) {
- return false;
- }
- var isValid = true;
- var dateInfo = {};
- format.replace(token, function ($0) {
- if (parseFlags[$0]) {
- var info = parseFlags[$0];
- var index = dateStr.search(info[0]);
- if (!~index) {
- isValid = false;
- } else {
- dateStr.replace(info[0], function (result) {
- info[1](dateInfo, result, i18n);
- dateStr = dateStr.substr(index + result.length);
- return result;
- });
- }
- }
- return parseFlags[$0] ? '' : $0.slice(1, $0.length - 1);
- });
- if (!isValid) {
- return false;
- }
- var today = new Date();
- if (dateInfo.isPm === true && dateInfo.hour != null && +dateInfo.hour !== 12) {
- dateInfo.hour = +dateInfo.hour + 12;
- } else if (dateInfo.isPm === false && +dateInfo.hour === 12) {
- dateInfo.hour = 0;
- }
- var date;
- if (dateInfo.timezoneOffset != null) {
- dateInfo.minute = +(dateInfo.minute || 0) - +dateInfo.timezoneOffset;
- date = new Date(Date.UTC(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1, dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0));
- } else {
- date = new Date(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1, dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0);
- }
- return date;
- };
- /* istanbul ignore next */
- if (typeof module !== 'undefined' && module.exports) {
- module.exports = fecha;
- } else if (true) {
- !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {
- return fecha;
- }).call(exports, __webpack_require__, exports, module),
- __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
- } else {
- main.fecha = fecha;
- }
- })(this);
- /***/ }),
- /* 12 */
- /***/ (function(module, exports, __webpack_require__) {
- /**
- * @fileOverview 提取公共代码到util方法
- * @author dxq613@gmail.com
- */
- var isString = __webpack_require__(6);
- var isDate = __webpack_require__(22);
- module.exports = {
- toTimeStamp: function toTimeStamp(value) {
- if (isString(value)) {
- if (value.indexOf('T') > 0) {
- value = new Date(value).getTime();
- } else {
- value = new Date(value.replace(/-/ig, '/')).getTime();
- }
- }
- if (isDate(value)) {
- value = value.getTime();
- }
- return value;
- }
- };
- /***/ }),
- /* 13 */
- /***/ (function(module, exports, __webpack_require__) {
- /**
- * @fileOverview Scale entry, used to reference all the scales
- * @author dxq613@gmail.com
- */
- var lowerFirst = __webpack_require__(14);
- var Base = __webpack_require__(0);
- Base.Linear = __webpack_require__(4);
- Base.Identity = __webpack_require__(19);
- Base.Cat = __webpack_require__(9);
- Base.Time = __webpack_require__(20);
- Base.TimeCat = __webpack_require__(23);
- Base.Log = __webpack_require__(24);
- Base.Pow = __webpack_require__(25);
- var _loop = function _loop(k) {
- if (Base.hasOwnProperty(k)) {
- var methodName = lowerFirst(k);
- Base[methodName] = function (cfg) {
- return new Base[k](cfg);
- };
- }
- };
- for (var k in Base) {
- _loop(k);
- }
- var CAT_ARR = ['cat', 'timeCat'];
- Base.isCategory = function (type) {
- return CAT_ARR.indexOf(type) >= 0;
- };
- module.exports = Base;
- /***/ }),
- /* 14 */
- /***/ (function(module, exports, __webpack_require__) {
- var toString = __webpack_require__(15);
- var lowerFirst = function lowerFirst(value) {
- var str = toString(value);
- return str.charAt(0).toLowerCase() + str.substring(1);
- };
- module.exports = lowerFirst;
- /***/ }),
- /* 15 */
- /***/ (function(module, exports, __webpack_require__) {
- var isNil = __webpack_require__(2);
- function toString(value) {
- if (isNil(value)) return '';
- return value.toString();
- }
- module.exports = toString;
- /***/ }),
- /* 16 */
- /***/ (function(module, exports) {
- function _mix(dist, obj) {
- for (var key in obj) {
- if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {
- dist[key] = obj[key];
- }
- }
- }
- var mix = function mix(dist, src1, src2, src3) {
- if (src1) _mix(dist, src1);
- if (src2) _mix(dist, src2);
- if (src3) _mix(dist, src3);
- return dist;
- };
- module.exports = mix;
- /***/ }),
- /* 17 */
- /***/ (function(module, exports, __webpack_require__) {
- var isType = __webpack_require__(3);
- var isArray = Array.isArray ? Array.isArray : function (value) {
- return isType(value, 'Array');
- };
- module.exports = isArray;
- /***/ }),
- /* 18 */
- /***/ (function(module, exports, __webpack_require__) {
- /**
- * @fileOverview 自动计算数字坐标轴
- * @author dxq613@gmail.com
- */
- var isNil = __webpack_require__(2);
- var isNumber = __webpack_require__(5);
- var AutoUtil = __webpack_require__(8);
- var MIN_COUNT = 5;
- var MAX_COUNT = 7;
- var SNAP_COUNT_ARRAY = [0, 1, 1.2, 1.5, 1.6, 2, 2.2, 2.4, 2.5, 3, 4, 5, 6, 7.5, 8, 10];
- var SNAP_ARRAY = [0, 1, 2, 4, 5, 10];
- var EPS = 1e-12;
- module.exports = function (info) {
- var min = info.min;
- var max = info.max;
- var interval = info.interval;
- var minTickInterval = info.minTickInterval;
- var ticks = [];
- var minCount = info.minCount || MIN_COUNT;
- var maxCount = info.maxCount || MAX_COUNT;
- var isFixedCount = minCount === maxCount; // 是否限定死了个数
- var minLimit = isNil(info.minLimit) ? -Infinity : info.minLimit; // 限定的最小值
- var maxLimit = isNil(info.maxLimit) ? Infinity : info.maxLimit; // 限定最大值
- var avgCount = (minCount + maxCount) / 2;
- var count = avgCount; // 用户传入的逼近数组
- var snapArray = info.snapArray ? info.snapArray : isFixedCount ? SNAP_COUNT_ARRAY : SNAP_ARRAY; // 如果限定大小范围,同时大小范围等于用户传入的范围,同时限定了个数,interval 按照个数均分
- if (min === minLimit && max === maxLimit && isFixedCount) {
- interval = (max - min) / (count - 1);
- }
- if (isNil(min)) {
- min = 0;
- }
- if (isNil(max)) {
- max = 0;
- }
- if (Math.abs(max - min) < EPS) {
- if (min === 0) {
- max = 1;
- } else {
- if (min > 0) {
- min = 0;
- } else {
- max = 0;
- }
- }
- if (max - min < 5 && !interval && max - min >= 1) {
- interval = 1;
- }
- }
- if (isNil(interval)) {
- // 计算间距
- var temp = (max - min) / (avgCount - 1);
- interval = AutoUtil.snapFactorTo(temp, snapArray, 'ceil');
- if (maxCount !== minCount) {
- count = parseInt((max - min) / interval, 10);
- if (count > maxCount) {
- count = maxCount;
- }
- if (count < minCount) {
- count = minCount;
- } // 不确定tick的个数时,使得tick偏小
- interval = AutoUtil.snapFactorTo((max - min) / (count - 1), snapArray, 'floor');
- }
- } // interval should not be less than minTickInterval
- if (isNumber(minTickInterval) && interval < minTickInterval) {
- interval = minTickInterval;
- }
- if (info.interval || maxCount !== minCount) {
- // 校正 max 和 min
- max = Math.min(AutoUtil.snapMultiple(max, interval, 'ceil'), maxLimit); // 向上逼近
- min = Math.max(AutoUtil.snapMultiple(min, interval, 'floor'), minLimit); // 向下逼近
- count = Math.round((max - min) / interval);
- min = AutoUtil.fixedBase(min, interval);
- max = AutoUtil.fixedBase(max, interval);
- } else {
- avgCount = parseInt(avgCount, 10); // 取整
- var avg = (max + min) / 2;
- var avgTick = AutoUtil.snapMultiple(avg, interval, 'ceil');
- var sideCount = Math.floor((avgCount - 2) / 2);
- var maxTick = avgTick + sideCount * interval;
- var minTick;
- if (avgCount % 2 === 0) {
- minTick = avgTick - sideCount * interval;
- } else {
- minTick = avgTick - (sideCount + 1) * interval;
- }
- var prevMaxTick = null; // 如果减去intervl, fixBase后,新的minTick没有大于之前的值,就退出,防止死循环
- while (maxTick < max && (prevMaxTick === null || maxTick > prevMaxTick)) {
- // 保证计算出来的刻度最大值 maxTick 不小于数据最大值 max
- prevMaxTick = maxTick;
- maxTick = AutoUtil.fixedBase(maxTick + interval, interval);
- }
- var prevMinTick = null; // 如果减去intervl, fixBase后,新的minTick没有小于之前的值,就退出,防止死循环
- while (minTick > min && (prevMinTick === null || minTick < prevMinTick)) {
- // 保证计算出来的刻度最小值 minTick 不小于数据最大值 min
- prevMinTick = minTick;
- minTick = AutoUtil.fixedBase(minTick - interval, interval); // 防止超常浮点数计算问题
- }
- max = maxTick;
- min = minTick;
- }
- max = Math.min(max, maxLimit);
- min = Math.max(min, minLimit);
- ticks.push(min);
- for (var i = 1; i < count; i++) {
- var tickValue = AutoUtil.fixedBase(interval * i + min, interval);
- if (tickValue < max) {
- ticks.push(tickValue);
- }
- }
- if (ticks[ticks.length - 1] < max) {
- ticks.push(max);
- }
- return {
- min: min,
- max: max,
- interval: interval,
- count: count,
- ticks: ticks
- };
- };
- /***/ }),
- /* 19 */
- /***/ (function(module, exports, __webpack_require__) {
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
- var Base = __webpack_require__(0);
- var isNumber = __webpack_require__(5);
- var Identity =
- /*#__PURE__*/
- function (_Base) {
- _inheritsLoose(Identity, _Base);
- function Identity() {
- return _Base.apply(this, arguments) || this;
- }
- var _proto = Identity.prototype;
- _proto._initDefaultCfg = function _initDefaultCfg() {
- _Base.prototype._initDefaultCfg.call(this);
- this.isIdentity = true;
- this.type = 'identity';
- /**
- * 常量值
- * @type {*}
- */
- this.value = null;
- }
- /**
- * @override
- */
- ;
- _proto.getText = function getText() {
- return this.value.toString();
- }
- /**
- * @override
- */
- ;
- _proto.scale = function scale(value) {
- if (this.value !== value && isNumber(value)) {
- return value;
- }
- return this.range[0];
- }
- /**
- * @override
- */
- ;
- _proto.invert = function invert() {
- return this.value;
- };
- return Identity;
- }(Base);
- Base.Identity = Identity;
- module.exports = Identity;
- /***/ }),
- /* 20 */
- /***/ (function(module, exports, __webpack_require__) {
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
- /**
- * @fileOverview The measurement of linear data scale function
- * @author dxq613@gmail.com
- */
- var fecha = __webpack_require__(11);
- var each = __webpack_require__(1);
- var isNil = __webpack_require__(2);
- var isString = __webpack_require__(6);
- var Base = __webpack_require__(0);
- var Linear = __webpack_require__(4);
- var timeAuto = __webpack_require__(21);
- var TimeUtil = __webpack_require__(12);
- /**
- * 时间度量的构造函数
- * @class Scale.Time
- */
- var Time =
- /*#__PURE__*/
- function (_Linear) {
- _inheritsLoose(Time, _Linear);
- function Time() {
- return _Linear.apply(this, arguments) || this;
- }
- var _proto = Time.prototype;
- _proto._initDefaultCfg = function _initDefaultCfg() {
- _Linear.prototype._initDefaultCfg.call(this);
- this.type = 'time';
- this.mask = 'YYYY-MM-DD';
- }
- /**
- * @override
- */
- ;
- _proto.init = function init() {
- var self = this;
- var values = self.values;
- if (values && values.length) {
- // 重新计算最大最小值
- var timeStamps = [];
- var min = Infinity; // 最小值
- var secondMin = min; // 次小值
- var max = 0; // 使用一个循环,计算min,max,secondMin
- each(values, function (v) {
- var timeStamp = self._toTimeStamp(v);
- if (isNaN(timeStamp)) {
- throw new TypeError("Invalid Time: " + v);
- }
- if (min > timeStamp) {
- secondMin = min;
- min = timeStamp;
- } else if (secondMin > timeStamp) {
- secondMin = timeStamp;
- }
- if (max < timeStamp) {
- max = timeStamp;
- }
- timeStamps.push(timeStamp);
- }); // 存在多个值时,设置最小间距
- if (values.length > 1) {
- self.minTickInterval = secondMin - min;
- }
- if (isNil(self.min) || self._toTimeStamp(self.min) > min) {
- self.min = min;
- }
- if (isNil(self.max) || self._toTimeStamp(self.max) < max) {
- self.max = max;
- }
- }
- _Linear.prototype.init.call(this);
- };
- _proto.calculateTicks = function calculateTicks() {
- var self = this;
- var min = self.min;
- var max = self.max;
- var count = self.tickCount;
- var interval = self.tickInterval;
- var tmp = timeAuto({
- min: min,
- max: max,
- minCount: count,
- maxCount: count,
- interval: interval,
- minInterval: self.minTickInterval
- });
- return tmp.ticks;
- }
- /**
- * @override
- */
- ;
- _proto.getText = function getText(value) {
- var formatter = this.formatter;
- value = this.translate(value);
- value = formatter ? formatter(value) : fecha.format(value, this.mask);
- return value;
- }
- /**
- * @override
- */
- ;
- _proto.scale = function scale(value) {
- if (isString(value)) {
- value = this.translate(value);
- }
- return _Linear.prototype.scale.call(this, value);
- }
- /**
- * @override
- */
- ;
- _proto.translate = function translate(value) {
- return this._toTimeStamp(value);
- } // 将时间转换为时间戳
- ;
- _proto._toTimeStamp = function _toTimeStamp(value) {
- return TimeUtil.toTimeStamp(value);
- };
- return Time;
- }(Linear);
- Base.Time = Time;
- module.exports = Time;
- /***/ }),
- /* 21 */
- /***/ (function(module, exports, __webpack_require__) {
- /**
- * @fileOverview 计算时间坐标轴
- * @author dxq613@gmail.com
- */
- var AutoUtil = __webpack_require__(8);
- var isNil = __webpack_require__(2);
- var MAX_COUNT = 6;
- var SNAP_ARRAY = [1, 2, 4, 6, 8, 12];
- var MINUTE_MS = 60 * 1000;
- var HOUR_MS = 3600 * 1000;
- var DAY_MS = 24 * 3600 * 1000;
- function getYear(date) {
- return new Date(date).getFullYear();
- }
- function createYear(year) {
- return new Date(year, 0, 1).getTime();
- }
- function getMonth(date) {
- return new Date(date).getMonth();
- }
- function diffMonth(min, max) {
- var minYear = getYear(min);
- var maxYear = getYear(max);
- var minMonth = getMonth(min);
- var maxMonth = getMonth(max);
- return (maxYear - minYear) * 12 + (maxMonth - minMonth) % 12;
- }
- function creatMonth(year, month) {
- return new Date(year, month, 1).getTime();
- }
- function diffDay(min, max) {
- return Math.ceil((max - min) / DAY_MS);
- }
- function diffHour(min, max) {
- return Math.ceil((max - min) / HOUR_MS);
- }
- function diffMinus(min, max) {
- return Math.ceil((max - min) / (60 * 1000));
- }
- module.exports = function (info) {
- var minInterval = info.minInterval;
- var ticks = [];
- var min = info.min;
- var max = info.max;
- var interval = info.interval;
- var count; // 如果最大值和最小值相等,则设置最大值大于最小值一天
- if (max === min) {
- max = min + DAY_MS;
- } // 计算间距
- if (isNil(interval)) {
- var innerTime = max - min;
- var dms = DAY_MS; // 天代表的秒
- var yms = 365 * dms; // 年代表的秒
- interval = parseInt(innerTime / (info.maxCount || MAX_COUNT), 10);
- if (minInterval && minInterval > interval) {
- interval = minInterval;
- }
- var yfactor = interval / yms;
- var minYear = getYear(min); // 大于半年
- if (yfactor > 0.51) {
- var year = Math.ceil(yfactor); // interval = year * yms;
- var maxYear = getYear(max);
- for (var i = minYear; i <= maxYear + year; i = i + year) {
- ticks.push(createYear(i));
- }
- interval = null;
- } else if (yfactor > 0.0834) {
- // 大于一个月
- var month = Math.ceil(yfactor / 0.0834);
- var mmMoth = getMonth(min);
- var dMonths = diffMonth(min, max);
- for (var _i = 0; _i <= dMonths + month; _i = _i + month) {
- ticks.push(creatMonth(minYear, _i + mmMoth));
- }
- interval = null;
- } else if (interval > dms * 0.5) {
- // 大于一天
- var date = new Date(min);
- var _year = date.getFullYear();
- var _month = date.getMonth(min);
- var mday = date.getDate();
- var day = Math.ceil(interval / dms);
- var ddays = diffDay(min, max);
- interval = day * dms;
- for (var _i2 = 0; _i2 < ddays + day; _i2 = _i2 + day) {
- ticks.push(new Date(_year, _month, mday + _i2).getTime());
- }
- } else if (interval > HOUR_MS) {
- // 大于一个小时
- var _date = new Date(min);
- var _year2 = _date.getFullYear();
- var _month2 = _date.getMonth(min);
- var _day = _date.getDate();
- var hour = _date.getHours();
- var hours = AutoUtil.snapTo(SNAP_ARRAY, Math.ceil(interval / HOUR_MS));
- var dHours = diffHour(min, max);
- interval = hours * HOUR_MS;
- for (var _i3 = 0; _i3 <= dHours + hours; _i3 = _i3 + hours) {
- ticks.push(new Date(_year2, _month2, _day, hour + _i3).getTime());
- }
- } else if (interval > MINUTE_MS) {
- // 最小单位是分钟
- var dMinus = diffMinus(min, max);
- var minutes = Math.ceil(interval / MINUTE_MS);
- interval = minutes * MINUTE_MS;
- for (var _i4 = 0; _i4 <= dMinus + minutes; _i4 = _i4 + minutes) {
- ticks.push(min + _i4 * MINUTE_MS);
- }
- } else {
- if (interval < 1000) {
- interval = 1000;
- }
- min = Math.floor(min / 1000) * 1000;
- var dSeconds = Math.ceil((max - min) / 1000);
- var seconds = Math.ceil(interval / 1000);
- interval = seconds * 1000;
- for (var _i5 = 0; _i5 < dSeconds + seconds; _i5 = _i5 + seconds) {
- ticks.push(min + _i5 * 1000);
- }
- }
- }
- if (!ticks.length) {
- min = Math.floor(min / 1000) * 1000;
- max = Math.ceil(max / 1000) * 1000;
- count = (max - min) / interval;
- for (var _i6 = 0; _i6 <= count; _i6++) {
- ticks.push(AutoUtil.fixedBase(interval * _i6 + min, interval));
- }
- }
- return {
- max: max,
- min: min,
- interval: interval,
- ticks: ticks,
- count: ticks.length
- };
- };
- /***/ }),
- /* 22 */
- /***/ (function(module, exports, __webpack_require__) {
- var isType = __webpack_require__(3);
- var isDate = function isDate(value) {
- return isType(value, 'Date');
- };
- module.exports = isDate;
- /***/ }),
- /* 23 */
- /***/ (function(module, exports, __webpack_require__) {
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
- /**
- * @fileOverview 时间数据作为分类类型
- * @author dxq613@gmail.com
- */
- var Base = __webpack_require__(0);
- var Category = __webpack_require__(9);
- var fecha = __webpack_require__(11);
- var catAuto = __webpack_require__(10);
- var TimeUtil = __webpack_require__(12);
- var each = __webpack_require__(1);
- var isNumber = __webpack_require__(5);
- var isObject = __webpack_require__(7);
- var isString = __webpack_require__(6);
- /**
- * 度量的构造函数
- * @class Scale.TimeCategory
- */
- var TimeCategory =
- /*#__PURE__*/
- function (_Category) {
- _inheritsLoose(TimeCategory, _Category);
- function TimeCategory() {
- return _Category.apply(this, arguments) || this;
- }
- var _proto = TimeCategory.prototype;
- _proto._initDefaultCfg = function _initDefaultCfg() {
- _Category.prototype._initDefaultCfg.call(this);
- this.type = 'timeCat';
- /**
- * 是否需要排序,默认进行排序
- * @type {Boolean}
- */
- this.sortable = true;
- this.tickCount = 5;
- /**
- * 时间格式化
- * @type {String}
- */
- this.mask = 'YYYY-MM-DD';
- };
- _proto.init = function init() {
- var self = this;
- var values = this.values; // 针对时间分类类型,会将时间统一转换为时间戳
- each(values, function (v, i) {
- values[i] = self._toTimeStamp(v);
- });
- if (this.sortable) {
- // 允许排序
- values.sort(function (v1, v2) {
- return v1 - v2;
- });
- }
- if (!self.ticks) {
- self.ticks = this.calculateTicks();
- }
- }
- /**
- * 计算 ticks
- * @return {array} 返回 ticks 数组
- */
- ;
- _proto.calculateTicks = function calculateTicks() {
- var self = this;
- var count = self.tickCount;
- var ticks;
- if (count) {
- var temp = catAuto({
- maxCount: count,
- data: self.values,
- isRounding: self.isRounding
- });
- ticks = temp.ticks;
- } else {
- ticks = self.values;
- }
- return ticks;
- }
- /**
- * @override
- */
- ;
- _proto.translate = function translate(value) {
- value = this._toTimeStamp(value);
- var index = this.values.indexOf(value);
- if (index === -1) {
- if (isNumber(value) && value < this.values.length) {
- index = value;
- } else {
- index = NaN;
- }
- }
- return index;
- }
- /**
- * @override
- */
- ;
- _proto.scale = function scale(value) {
- var rangeMin = this.rangeMin();
- var rangeMax = this.rangeMax();
- var index = this.translate(value);
- var percent;
- if (this.values.length === 1 || isNaN(index)) {
- // is index is NAN should not be set as 0
- percent = index;
- } else if (index > -1) {
- percent = index / (this.values.length - 1);
- } else {
- percent = 0;
- }
- return rangeMin + percent * (rangeMax - rangeMin);
- }
- /**
- * @override
- */
- ;
- _proto.getText = function getText(value) {
- var result = '';
- var index = this.translate(value);
- if (index > -1) {
- result = this.values[index];
- } else {
- result = value;
- }
- var formatter = this.formatter;
- result = parseInt(result, 10);
- result = formatter ? formatter(result) : fecha.format(result, this.mask);
- return result;
- }
- /**
- * @override
- */
- ;
- _proto.getTicks = function getTicks() {
- var self = this;
- var ticks = this.ticks;
- var rst = [];
- each(ticks, function (tick) {
- var obj;
- if (isObject(tick)) {
- obj = tick;
- } else {
- obj = {
- text: isString(tick) ? tick : self.getText(tick),
- value: self.scale(tick),
- tickValue: tick // 用于坐标轴上文本动画时确定前后帧的对应关系
- };
- }
- rst.push(obj);
- });
- return rst;
- } // 将时间转换为时间戳
- ;
- _proto._toTimeStamp = function _toTimeStamp(value) {
- return TimeUtil.toTimeStamp(value);
- };
- return TimeCategory;
- }(Category);
- Base.TimeCat = TimeCategory;
- module.exports = TimeCategory;
- /***/ }),
- /* 24 */
- /***/ (function(module, exports, __webpack_require__) {
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
- /**
- * @fileOverview 使用度量,进行log转换
- * @author dxq613@gmail.com
- */
- var each = __webpack_require__(1);
- var Base = __webpack_require__(0);
- var Linear = __webpack_require__(4); // 计算log
- function log(a, b) {
- if (a === 1) {
- return 1;
- }
- return Math.log(b) / Math.log(a);
- }
- /**
- * 度量的log计算
- * @class Scale.Log
- */
- var Log =
- /*#__PURE__*/
- function (_Linear) {
- _inheritsLoose(Log, _Linear);
- function Log() {
- return _Linear.apply(this, arguments) || this;
- }
- var _proto = Log.prototype;
- _proto._initDefaultCfg = function _initDefaultCfg() {
- _Linear.prototype._initDefaultCfg.call(this);
- this.type = 'log';
- /**
- * @override
- * log 的坐标点的个数控制在10个以下
- * @type {Number}
- */
- this.tickCount = 10;
- /**
- * 进行log计算的基数
- * @type {Number}
- */
- this.base = 2; // 最小的tick,仅内部使用
- this._minTick = null;
- }
- /**
- * @override
- */
- ;
- _proto.calculateTicks = function calculateTicks() {
- var self = this;
- var base = self.base;
- var minTick;
- if (self.min < 0) {
- throw new Error('The minimum value must be greater than zero!');
- }
- var maxTick = log(base, self.max);
- if (self.min > 0) {
- minTick = Math.floor(log(base, self.min));
- } else {
- var values = self.values;
- var positiveMin = self.max; // 查找大于0的第一个值, 如果都小于0,默认为1
- each(values, function (value) {
- if (value > 0 && value < positiveMin) {
- positiveMin = value;
- }
- });
- if (positiveMin === self.max) {
- positiveMin = self.max / base;
- }
- if (positiveMin > 1) {
- positiveMin = 1;
- }
- minTick = Math.floor(log(base, positiveMin));
- self._minTick = minTick;
- self.positiveMin = positiveMin;
- }
- var count = maxTick - minTick;
- var tickCount = self.tickCount;
- var avg = Math.ceil(count / tickCount);
- var ticks = [];
- for (var i = minTick; i < maxTick + avg; i = i + avg) {
- ticks.push(Math.pow(base, i));
- }
- if (self.min === 0) {
- ticks.unshift(0);
- }
- return ticks;
- } // 获取度量计算时,value占的定义域百分比
- ;
- _proto._getScalePercent = function _getScalePercent(value) {
- var max = this.max;
- var min = this.min;
- if (max === min) {
- return 0;
- } // 如果值小于等于0,则按照0处理
- if (value <= 0) {
- return 0;
- }
- var base = this.base;
- var positiveMin = this.positiveMin; // 如果min == 0, 则根据比0大的最小值,计算比例关系。这个最小值作为坐标轴上的第二个tick,第一个是0但是不显示
- if (positiveMin) {
- min = positiveMin * 1 / base;
- }
- var percent; // 如果数值小于次小值,那么就计算 value / 次小值 占整体的比例
- if (value < positiveMin) {
- percent = value / positiveMin / (log(base, max) - log(base, min));
- } else {
- percent = (log(base, value) - log(base, min)) / (log(base, max) - log(base, min));
- }
- return percent;
- }
- /**
- * @override
- */
- ;
- _proto.scale = function scale(value) {
- var percent = this._getScalePercent(value);
- var rangeMin = this.rangeMin();
- var rangeMax = this.rangeMax();
- return rangeMin + percent * (rangeMax - rangeMin);
- }
- /**
- * @override
- */
- ;
- _proto.invert = function invert(value) {
- var base = this.base;
- var max = log(base, this.max);
- var rangeMin = this.rangeMin();
- var range = this.rangeMax() - rangeMin;
- var min;
- var positiveMin = this.positiveMin;
- if (positiveMin) {
- if (value === 0) {
- return 0;
- }
- min = log(base, positiveMin / base);
- var appendPercent = 1 / (max - min) * range; // 0 到 positiveMin的占比
- if (value < appendPercent) {
- // 落到 0 - positiveMin 之间
- return value / appendPercent * positiveMin;
- }
- } else {
- min = log(base, this.min);
- }
- var percent = (value - rangeMin) / range;
- var tmp = percent * (max - min) + min;
- return Math.pow(base, tmp);
- };
- return Log;
- }(Linear);
- Base.Log = Log;
- module.exports = Log;
- /***/ }),
- /* 25 */
- /***/ (function(module, exports, __webpack_require__) {
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
- /**
- * @fileOverview 使用pow进行度量计算
- * @author dxq613@gmail.com
- */
- var Base = __webpack_require__(0);
- var Linear = __webpack_require__(4); // 求以a为次幂,结果为b的基数,如 x^^a = b;求x
- function calBase(a, b) {
- var e = Math.E;
- var value = Math.pow(e, Math.log(b) / a); // 使用换底公式求底
- return value;
- }
- /**
- * 度量的Pow计算
- * @class Scale.Log
- */
- var Pow =
- /*#__PURE__*/
- function (_Linear) {
- _inheritsLoose(Pow, _Linear);
- function Pow() {
- return _Linear.apply(this, arguments) || this;
- }
- var _proto = Pow.prototype;
- _proto._initDefaultCfg = function _initDefaultCfg() {
- _Linear.prototype._initDefaultCfg.call(this);
- this.type = 'pow';
- /**
- * @override
- * pow 的坐标点的个数控制在10个以下
- * @type {Number}
- */
- this.tickCount = 10;
- /**
- * 进行pow计算的基数
- * @type {Number}
- */
- this.exponent = 2;
- }
- /**
- * @override
- */
- ;
- _proto.calculateTicks = function calculateTicks() {
- var self = this;
- var exponent = self.exponent;
- var min;
- var max = Math.ceil(calBase(exponent, self.max));
- if (self.min >= 0) {
- min = Math.floor(calBase(exponent, self.min));
- } else {
- min = 0;
- }
- if (min > max) {
- var tmp = max;
- max = min;
- min = tmp;
- }
- var count = max - min;
- var tickCount = self.tickCount;
- var avg = Math.ceil(count / tickCount);
- var ticks = [];
- for (var i = min; i < max + avg; i = i + avg) {
- ticks.push(Math.pow(i, exponent));
- }
- return ticks;
- } // 获取度量计算时,value占的定义域百分比
- ;
- _proto._getScalePercent = function _getScalePercent(value) {
- var max = this.max;
- var min = this.min;
- if (max === min) {
- return 0;
- }
- var exponent = this.exponent;
- var percent = (calBase(exponent, value) - calBase(exponent, min)) / (calBase(exponent, max) - calBase(exponent, min));
- return percent;
- }
- /**
- * @override
- */
- ;
- _proto.scale = function scale(value) {
- var percent = this._getScalePercent(value);
- var rangeMin = this.rangeMin();
- var rangeMax = this.rangeMax();
- return rangeMin + percent * (rangeMax - rangeMin);
- }
- /**
- * @override
- */
- ;
- _proto.invert = function invert(value) {
- var percent = (value - this.rangeMin()) / (this.rangeMax() - this.rangeMin());
- var exponent = this.exponent;
- var max = calBase(exponent, this.max);
- var min = calBase(exponent, this.min);
- var tmp = percent * (max - min) + min;
- return Math.pow(tmp, exponent);
- };
- return Pow;
- }(Linear);
- Base.Pow = Pow;
- module.exports = Pow;
- /***/ })
- /******/ ]);
- });
- //# sourceMappingURL=scale.js.map
|