You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					97 lines
				
				2.5 KiB
			
		
		
			
		
	
	
					97 lines
				
				2.5 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								export default (function (o, c, dayjs) {
							 | 
						||
| 
								 | 
							
								  var proto = c.prototype;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var isObject = function isObject(obj) {
							 | 
						||
| 
								 | 
							
								    return !(obj instanceof Date) && !(obj instanceof Array) && !proto.$utils().u(obj) && obj.constructor.name === 'Object';
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var prettyUnit = function prettyUnit(u) {
							 | 
						||
| 
								 | 
							
								    var unit = proto.$utils().p(u);
							 | 
						||
| 
								 | 
							
								    return unit === 'date' ? 'day' : unit;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var parseDate = function parseDate(cfg) {
							 | 
						||
| 
								 | 
							
								    var date = cfg.date,
							 | 
						||
| 
								 | 
							
								        utc = cfg.utc;
							 | 
						||
| 
								 | 
							
								    var $d = {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (isObject(date)) {
							 | 
						||
| 
								 | 
							
								      if (!Object.keys(date).length) {
							 | 
						||
| 
								 | 
							
								        return new Date();
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var now = utc ? dayjs.utc() : dayjs();
							 | 
						||
| 
								 | 
							
								      Object.keys(date).forEach(function (k) {
							 | 
						||
| 
								 | 
							
								        $d[prettyUnit(k)] = date[k];
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								      var d = $d.day || (!$d.year && !($d.month >= 0) ? now.date() : 1);
							 | 
						||
| 
								 | 
							
								      var y = $d.year || now.year();
							 | 
						||
| 
								 | 
							
								      var M = $d.month >= 0 ? $d.month : !$d.year && !$d.day ? now.month() : 0; // eslint-disable-line no-nested-ternary,max-len
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var h = $d.hour || 0;
							 | 
						||
| 
								 | 
							
								      var m = $d.minute || 0;
							 | 
						||
| 
								 | 
							
								      var s = $d.second || 0;
							 | 
						||
| 
								 | 
							
								      var ms = $d.millisecond || 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (utc) {
							 | 
						||
| 
								 | 
							
								        return new Date(Date.UTC(y, M, d, h, m, s, ms));
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      return new Date(y, M, d, h, m, s, ms);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return date;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var oldParse = proto.parse;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  proto.parse = function (cfg) {
							 | 
						||
| 
								 | 
							
								    cfg.date = parseDate.bind(this)(cfg);
							 | 
						||
| 
								 | 
							
								    oldParse.bind(this)(cfg);
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var oldSet = proto.set;
							 | 
						||
| 
								 | 
							
								  var oldAdd = proto.add;
							 | 
						||
| 
								 | 
							
								  var oldSubtract = proto.subtract;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var callObject = function callObject(call, argument, string, offset) {
							 | 
						||
| 
								 | 
							
								    if (offset === void 0) {
							 | 
						||
| 
								 | 
							
								      offset = 1;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var keys = Object.keys(argument);
							 | 
						||
| 
								 | 
							
								    var chain = this;
							 | 
						||
| 
								 | 
							
								    keys.forEach(function (key) {
							 | 
						||
| 
								 | 
							
								      chain = call.bind(chain)(argument[key] * offset, key);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    return chain;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  proto.set = function (unit, value) {
							 | 
						||
| 
								 | 
							
								    value = value === undefined ? unit : value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (unit.constructor.name === 'Object') {
							 | 
						||
| 
								 | 
							
								      return callObject.bind(this)(function (i, s) {
							 | 
						||
| 
								 | 
							
								        return oldSet.bind(this)(s, i);
							 | 
						||
| 
								 | 
							
								      }, value, unit);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return oldSet.bind(this)(unit, value);
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  proto.add = function (value, unit) {
							 | 
						||
| 
								 | 
							
								    if (value.constructor.name === 'Object') {
							 | 
						||
| 
								 | 
							
								      return callObject.bind(this)(oldAdd, value, unit);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return oldAdd.bind(this)(value, unit);
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  proto.subtract = function (value, unit) {
							 | 
						||
| 
								 | 
							
								    if (value.constructor.name === 'Object') {
							 | 
						||
| 
								 | 
							
								      return callObject.bind(this)(oldAdd, value, unit, -1);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return oldSubtract.bind(this)(value, unit);
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								});
							 |