(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["attr"] = factory(); else root["attr"] = 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 = 7); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { /** * @fileOverview the Attribute base class */ var isString = __webpack_require__(4); var isArray = __webpack_require__(1); var isNil = __webpack_require__(5); var mix = __webpack_require__(10); var each = __webpack_require__(3); function toScaleString(scale, value) { if (isString(value)) { return value; } return scale.invert(scale.scale(value)); } /** * 所有视觉通道属性的基类 * @class Attr */ var AttributeBase = /*#__PURE__*/ function () { function AttributeBase(cfg) { var _this = this; /** * 属性的类型 * @type {String} */ this.type = 'base'; /** * 属性的名称 * @type {String} */ this.name = null; /** * 回调函数 * @type {Function} */ this.method = null; /** * 备选的值数组 * @type {Array} */ this.values = []; /** * 属性内部的度量 * @type {Array} */ this.scales = []; /** * 是否通过线性取值, 如果未指定,则根据数值的类型判定 * @type {Boolean} */ this.linear = null; /** * 当用户设置的 callback 返回 null 时, 应该返回默认 callback 中的值 */ var mixedCallback = null; var defaultCallback = this.callback; if (cfg.callback) { var userCallback = cfg.callback; mixedCallback = function mixedCallback() { for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) { params[_key] = arguments[_key]; } var ret = userCallback.apply(void 0, params); if (isNil(ret)) { ret = defaultCallback.apply(_this, params); } return ret; }; } mix(this, cfg); if (mixedCallback) { mix(this, { callback: mixedCallback }); } } // 获取属性值,将值映射到视觉通道 var _proto = AttributeBase.prototype; _proto._getAttrValue = function _getAttrValue(scale, value) { var values = this.values; if (scale.isCategory && !this.linear) { var index = scale.translate(value); return values[index % values.length]; } var percent = scale.scale(value); return this.getLinearValue(percent); }; /** * 如果进行线性映射,返回对应的映射值 * @protected * @param {Number} percent 百分比 * @return {*} 颜色值、形状、大小等 */ _proto.getLinearValue = function getLinearValue(percent) { var values = this.values; var steps = values.length - 1; var step = Math.floor(steps * percent); var leftPercent = steps * percent - step; var start = values[step]; var end = step === steps ? start : values[step + 1]; var rstValue = start + (end - start) * leftPercent; return rstValue; }; /** * 默认的回调函数 * @param {*} value 回调函数的值 * @type {Function} * @return {Array} 返回映射后的值 */ _proto.callback = function callback(value) { var self = this; var scale = self.scales[0]; var rstValue = null; if (scale.type === 'identity') { rstValue = scale.value; } else { rstValue = self._getAttrValue(scale, value); } return rstValue; }; /** * 根据度量获取属性名 * @return {Array} dims of this Attribute */ _proto.getNames = function getNames() { var scales = this.scales; var names = this.names; var length = Math.min(scales.length, names.length); var rst = []; for (var i = 0; i < length; i++) { rst.push(names[i]); } return rst; }; /** * 根据度量获取维度名 * @return {Array} dims of this Attribute */ _proto.getFields = function getFields() { var scales = this.scales; var rst = []; each(scales, function (scale) { rst.push(scale.field); }); return rst; }; /** * 根据名称获取度量 * @param {String} name the name of scale * @return {Scale} scale */ _proto.getScale = function getScale(name) { var scales = this.scales; var names = this.names; var index = names.indexOf(name); return scales[index]; }; /** * 映射数据 * @param {*} param1...paramn 多个数值 * @return {Array} 映射的值组成的数组 */ _proto.mapping = function mapping() { var scales = this.scales; var callback = this.callback; for (var _len2 = arguments.length, params = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { params[_key2] = arguments[_key2]; } var values = params; if (callback) { for (var i = 0, len = params.length; i < len; i++) { params[i] = this._toOriginParam(params[i], scales[i]); } values = callback.apply(this, params); } values = [].concat(values); return values; }; // 原始的参数 _proto._toOriginParam = function _toOriginParam(param, scale) { var rst = param; if (!scale.isLinear) { if (isArray(param)) { rst = []; for (var i = 0, len = param.length; i < len; i++) { rst.push(toScaleString(scale, param[i])); } } else { rst = toScaleString(scale, param); } } return rst; }; return AttributeBase; }(); module.exports = AttributeBase; /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { var isType = __webpack_require__(2); var isArray = Array.isArray ? Array.isArray : function (value) { return isType(value, 'Array'); }; module.exports = isArray; /***/ }), /* 2 */ /***/ (function(module, exports) { var toString = {}.toString; var isType = function isType(value, type) { return toString.call(value) === '[object ' + type + ']'; }; module.exports = isType; /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(9); var isArray = __webpack_require__(1); 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; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { var isType = __webpack_require__(2); var isString = function isString(str) { return isType(str, 'String'); }; module.exports = isString; /***/ }), /* 5 */ /***/ (function(module, exports) { // isFinite, var isNil = function isNil(value) { /** * isNil(null) => true * isNil() => true */ return value === null || value === undefined; }; module.exports = isNil; /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { /** * @fileOverview 颜色计算的辅助方法 * @author dxq613@gmail.com */ var isNumber = __webpack_require__(12); var isString = __webpack_require__(4); var each = __webpack_require__(3); // const RGB_REG = /rgb\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/; var RGB_REG = /rgba?\(([\s.,0-9]+)\)/; // 创建辅助 tag 取颜色 function createTmp() { var i = document.createElement('i'); i.title = 'Web Colour Picker'; i.style.display = 'none'; document.body.appendChild(i); return i; } // 获取颜色之间的插值 function getValue(start, end, percent, index) { var value = start[index] + (end[index] - start[index]) * percent; return value; } // 数组转换成颜色 function arr2rgb(arr) { return '#' + toHex(arr[0]) + toHex(arr[1]) + toHex(arr[2]); } // 将数值从 0-255 转换成16进制字符串 function toHex(value) { value = Math.round(value); value = value.toString(16); if (value.length === 1) { value = '0' + value; } return value; } function calColor(colors, percent) { if (isNaN(percent) || !isNumber(percent) || percent < 0) { percent = 0; } if (percent > 1) { percent = 1; } var steps = colors.length - 1; var step = Math.floor(steps * percent); var left = steps * percent - step; var start = colors[step]; var end = step === steps ? start : colors[step + 1]; var rgb = arr2rgb([getValue(start, end, left, 0), getValue(start, end, left, 1), getValue(start, end, left, 2)]); return rgb; } // rgb 颜色转换成数组 function rgb2arr(str) { var arr = []; arr.push(parseInt(str.substr(1, 2), 16)); arr.push(parseInt(str.substr(3, 2), 16)); arr.push(parseInt(str.substr(5, 2), 16)); return arr; } var colorCache = {}; var iEl = null; var ColorUtil = { /** * 将颜色转换到 rgb 的格式 * @param {String} color 颜色 * @return {String} 将颜色转换到 '#ffffff' 的格式 */ toRGB: function toRGB(color) { // 如果已经是 rgb的格式 if (color[0] === '#' && color.length === 7) { return color; } if (!iEl) { // 防止防止在页头报错 iEl = createTmp(); } var rst; if (colorCache[color]) { rst = colorCache[color]; } else { iEl.style.color = color; rst = document.defaultView.getComputedStyle(iEl, '').getPropertyValue('color'); var matchs = RGB_REG.exec(rst); var cArray = matchs[1].split(/\s*,\s*/); rst = arr2rgb(cArray); colorCache[color] = rst; } return rst; }, rgb2arr: rgb2arr, /** * 获取渐变函数 * @param {Array} colors 多个颜色 * @return {String} 颜色值 */ gradient: function gradient(colors) { var points = []; if (isString(colors)) { colors = colors.split('-'); } each(colors, function (color) { if (color.indexOf('#') === -1) { color = ColorUtil.toRGB(color); } points.push(rgb2arr(color)); }); return function (percent) { return calColor(points, percent); }; } }; module.exports = ColorUtil; /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { module.exports = { Position: __webpack_require__(8), Color: __webpack_require__(11), Shape: __webpack_require__(13), Size: __webpack_require__(14), Opacity: __webpack_require__(15), ColorUtil: __webpack_require__(6) }; /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } var isNil = __webpack_require__(5); var isArray = __webpack_require__(1); var each = __webpack_require__(3); var Base = __webpack_require__(0); var Position = /*#__PURE__*/ function (_Base) { _inheritsLoose(Position, _Base); function Position(cfg) { var _this; _this = _Base.call(this, cfg) || this; _this.names = ['x', 'y']; _this.type = 'position'; return _this; } var _proto = Position.prototype; _proto.mapping = function mapping(x, y) { var scales = this.scales; var coord = this.coord; var scaleX = scales[0]; var scaleY = scales[1]; var rstX; var rstY; var obj; if (isNil(x) || isNil(y)) { return []; } if (isArray(y) && isArray(x)) { rstX = []; rstY = []; for (var i = 0, j = 0, xLen = x.length, yLen = y.length; i < xLen && j < yLen; i++, j++) { obj = coord.convertPoint({ x: scaleX.scale(x[i]), y: scaleY.scale(y[j]) }); rstX.push(obj.x); rstY.push(obj.y); } } else if (isArray(y)) { x = scaleX.scale(x); rstY = []; each(y, function (yVal) { yVal = scaleY.scale(yVal); obj = coord.convertPoint({ x: x, y: yVal }); if (rstX && rstX !== obj.x) { if (!isArray(rstX)) { rstX = [rstX]; } rstX.push(obj.x); } else { rstX = obj.x; } rstY.push(obj.y); }); } else if (isArray(x)) { y = scaleY.scale(y); rstX = []; each(x, function (xVal) { xVal = scaleX.scale(xVal); obj = coord.convertPoint({ x: xVal, y: y }); if (rstY && rstY !== obj.y) { if (!isArray(rstY)) { rstY = [rstY]; } rstY.push(obj.y); } else { rstY = obj.y; } rstX.push(obj.x); }); } else { x = scaleX.scale(x); y = scaleY.scale(y); var point = coord.convertPoint({ x: x, y: y }); rstX = point.x; rstY = point.y; } return [rstX, rstY]; }; return Position; }(Base); module.exports = Position; /***/ }), /* 9 */ /***/ (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; /***/ }), /* 10 */ /***/ (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; /***/ }), /* 11 */ /***/ (function(module, exports, __webpack_require__) { function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } var isString = __webpack_require__(4); var ColorUtil = __webpack_require__(6); var Base = __webpack_require__(0); var Color = /*#__PURE__*/ function (_Base) { _inheritsLoose(Color, _Base); function Color(cfg) { var _this; _this = _Base.call(this, cfg) || this; _this.names = ['color']; _this.type = 'color'; _this.gradient = null; if (isString(_this.values)) { _this.linear = true; } return _this; } /** * @override */ var _proto = Color.prototype; _proto.getLinearValue = function getLinearValue(percent) { var gradient = this.gradient; if (!gradient) { var values = this.values; gradient = ColorUtil.gradient(values); this.gradient = gradient; } return gradient(percent); }; return Color; }(Base); module.exports = Color; /***/ }), /* 12 */ /***/ (function(module, exports, __webpack_require__) { /** * 判断是否数字 * @return {Boolean} 是否数字 */ var isType = __webpack_require__(2); var isNumber = function isNumber(value) { return isType(value, 'Number'); }; module.exports = isNumber; /***/ }), /* 13 */ /***/ (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 Shape = /*#__PURE__*/ function (_Base) { _inheritsLoose(Shape, _Base); function Shape(cfg) { var _this; _this = _Base.call(this, cfg) || this; _this.names = ['shape']; _this.type = 'shape'; _this.gradient = null; return _this; } /** * @override */ var _proto = Shape.prototype; _proto.getLinearValue = function getLinearValue(percent) { var values = this.values; var index = Math.round((values.length - 1) * percent); return values[index]; }; return Shape; }(Base); module.exports = Shape; /***/ }), /* 14 */ /***/ (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 Size = /*#__PURE__*/ function (_Base) { _inheritsLoose(Size, _Base); function Size(cfg) { var _this; _this = _Base.call(this, cfg) || this; _this.names = ['size']; _this.type = 'size'; _this.gradient = null; return _this; } return Size; }(Base); module.exports = Size; /***/ }), /* 15 */ /***/ (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 Opacity = /*#__PURE__*/ function (_Base) { _inheritsLoose(Opacity, _Base); function Opacity(cfg) { var _this; _this = _Base.call(this, cfg) || this; _this.names = ['opacity']; _this.type = 'opacity'; _this.gradient = null; return _this; } return Opacity; }(Base); module.exports = Opacity; /***/ }) /******/ ]); }); //# sourceMappingURL=attr.js.map