You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
17 KiB
JavaScript

"use strict";function _get(a,b,c){return _get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(a,b,c){var d=_superPropBase(a,b);if(d){var e=Object.getOwnPropertyDescriptor(d,b);return e.get?e.get.call(c):e.value}},_get(a,b,c||a)}function _superPropBase(a,b){for(;!Object.prototype.hasOwnProperty.call(a,b)&&(a=_getPrototypeOf(a),null!==a););return a}function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _possibleConstructorReturn(a,b){return b&&("object"===_typeof(b)||"function"==typeof b)?b:_assertThisInitialized(a)}function _assertThisInitialized(a){if(void 0===a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return a}function _getPrototypeOf(a){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function(a){return a.__proto__||Object.getPrototypeOf(a)},_getPrototypeOf(a)}function _inherits(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function");a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,writable:!0,configurable:!0}}),b&&_setPrototypeOf(a,b)}function _setPrototypeOf(a,b){return _setPrototypeOf=Object.setPrototypeOf||function(a,b){return a.__proto__=b,a},_setPrototypeOf(a,b)}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,c.key,c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),a}var AbstractSmartDatePart=function(){function a(b,c){_classCallCheck(this,a),this._state=a.STATE_NONE,this._cleanedValue="",this._parsedValue="",this._scanned="",this._placeholder=b,this._static=c}return _createClass(a,[{key:"state",value:function(){return this._state}},{key:"isNoState",value:function(){return this._state===a.STATE_NONE}},{key:"isIncomplete",value:function(){return this._state===a.STATE_INCOMPLETE}},{key:"isComplete",value:function(){return this._state===a.STATE_COMPLETE}},{key:"resetState",value:function(){this._state=a.STATE_NONE}},{key:"cleanedValue",value:function(){return this._cleanedValue}},{key:"parsedValue",value:function(){return this._parsedValue}},{key:"placeHolder",value:function(){return this._placeholder}},{key:"isStatic",value:function(){return this._static}},{key:"_isNumericSymbol",value:function(a){return"0"<=a&&"9">=a}},{key:"check",value:function(){return!1}}]),a}();AbstractSmartDatePart.STATE_NONE=0,AbstractSmartDatePart.STATE_INCOMPLETE=1,AbstractSmartDatePart.STATE_COMPLETE=2;var SmartDateStaticPart=function(a){function b(a){var c;return _classCallCheck(this,b),c=_possibleConstructorReturn(this,_getPrototypeOf(b).call(this,a,!0)),c._cleanedValue=a,c}return _inherits(b,a),_createClass(b,[{key:"parse",value:function(a){for(var b=a.value(),c=a.valueIndex();c<b.length&&!this._isNumericSymbol(b[c]);)c++;return this._parsedValue=b.substring(a.valueIndex(),c),this._state=AbstractSmartDatePart.STATE_COMPLETE,a.setValueIndex(c),!0}}]),b}(AbstractSmartDatePart),AbstractSmartDateNumericPart=function(a){function b(a,c){var d;return _classCallCheck(this,b),d=_possibleConstructorReturn(this,_getPrototypeOf(b).call(this,a,!1)),d._numericValue=0,d._size=c,d}return _inherits(b,a),_createClass(b,[{key:"numericValue",value:function(){return this._numericValue}},{key:"formatDate",value:function(){return""}},{key:"formatValue",value:function(a){var b=this._correctValue(a)+"";return"0"==b?b:b.length>this._size?b.substring(0,this._size):b.length<this._size?b.padStart(this._size,"0"):b}},{key:"_correctValue",value:function(a){var b=Math.round;return b(a)}},{key:"scanStringNumber",value:function(a){for(var b=a.valueIndex(),c=a.value();b<c.length&&this._isNumericSymbol(c[b]);)b++;var d=c.substring(a.valueIndex(),b);return a.setValueIndex(b),d}},{key:"calculateNumericValue",value:function(a,b){for(var c=0,d=0,e=0;c<a.length&&0===a[c];)c++;for(d=c;d<a.length&&e<b;)e=10*e+ +a[d],d++;return e>b&&d--,+a.substring(c,d)}},{key:"scanValue",value:function(a,b){for(var c=a.valueIndex(),d=a.value(),e=0;c<d.length&&this._isNumericSymbol(d[c])&&e<b;)e=10*e+ +d[c],c++;e>b&&c--;var f=d.substring(a.valueIndex(),c);return a.setValueIndex(c),f}},{key:"_defineParsingState",value:function(a,b){return 0<this._numericValue&&(this._parsedValue.length>=this._size||!b)?void(this._state=AbstractSmartDatePart.STATE_COMPLETE):10*this._numericValue>a?void(this._state=AbstractSmartDatePart.STATE_COMPLETE):void(this._state=AbstractSmartDatePart.STATE_INCOMPLETE)}},{key:"_defineCleanValue",value:function(){return this._cleanedValue="",this.isNoState()?void 0:this.isComplete()?void(this._cleanedValue=this.formatValue(this._numericValue)):void(0<this._parsedValue.length&&(this._cleanedValue=this._numericValue+""))}}]),b}(AbstractSmartDatePart),SmartDateDayPart=function(a){function b(){var a;return _classCallCheck(this,b),a=_possibleConstructorReturn(this,_getPrototypeOf(b).call(this,SmartDateFormat.DAY_PLACEHOLDER,2)),a.maximalValue=b.MAXIMAL_VALUE,a}return _inherits(b,a),_createClass(b,[{key:"resetState",value:function(){_get(_getPrototypeOf(b.prototype),"resetState",this).call(this),this.maximalValue=b.MAXIMAL_VALUE}},{key:"setMaximalValue",value:function(a){a!=a||a<b.MAXIMAL_VALUE_LOW_LIMIT||b.MAXIMAL_VALUE_HIGH_LIMIT<a||(this.maximalValue=a,this._numericValue<=this.maximalValue||(this._numericValue=this.maximalValue,this._defineCleanValue()))}},{key:"resetMaximalValue",value:function(){this.maximalValue=b.MAXIMAL_VALUE}},{key:"formatDate",value:function(a){return this.formatValue(a.getDate())}},{key:"parse",value:function(a){this._parsedValue=this.scanStringNumber(a),this._numericValue=this.calculateNumericValue(this._parsedValue,this.maximalValue),this._defineParsingState(this.maximalValue,a.isOver()),this._defineCleanValue()}}]),b}(AbstractSmartDateNumericPart);SmartDateDayPart.MAXIMAL_VALUE_LOW_LIMIT=28,SmartDateDayPart.MAXIMAL_VALUE_HIGH_LIMIT=31,SmartDateDayPart.MAXIMAL_VALUE=SmartDateDayPart.MAXIMAL_VALUE_HIGH_LIMIT;var SmartDateMonthPart=function(a){function b(){return _classCallCheck(this,b),_possibleConstructorReturn(this,_getPrototypeOf(b).call(this,SmartDateFormat.MONTH_PLACEHOLDER,2))}return _inherits(b,a),_createClass(b,[{key:"formatDate",value:function(a){return this.formatValue(a.getMonth()+1)}},{key:"parse",value:function(a){this._parsedValue=this.scanStringNumber(a),this._numericValue=this.calculateNumericValue(this._parsedValue,b.MAXIMAL_VALUE),this._defineParsingState(b.MAXIMAL_VALUE,a.isOver()),this._defineCleanValue()}}]),b}(AbstractSmartDateNumericPart);SmartDateMonthPart.MAXIMAL_VALUE=12;var SmartDateYearPart=function(a){function b(){return _classCallCheck(this,b),_possibleConstructorReturn(this,_getPrototypeOf(b).call(this,SmartDateFormat.YEAR_PLACEHOLDER,4))}return _inherits(b,a),_createClass(b,[{key:"formatDate",value:function(a){return this.formatValue(a.getFullYear())}},{key:"parse",value:function(a){this._parsedValue=this.scanStringNumber(a),this._numericValue=+this._parsedValue,this._defineParsingState(),this._numericValue>b.MAXIMAL_VALUE&&(this._numericValue=b.MAXIMAL_VALUE),this.isComplete()&&this._numericValue<b.MINIMAL_VALUE&&(this._numericValue=b.MINIMAL_VALUE),this._defineCleanValue()}},{key:"_defineParsingState",value:function(){return 0<this._numericValue&&this._parsedValue.length>=this._size?void(this._state=AbstractSmartDatePart.STATE_COMPLETE):void(this._state=AbstractSmartDatePart.STATE_INCOMPLETE)}},{key:"_defineCleanValue",value:function(){this._cleanedValue=0<this._numericValue?this._numericValue+"":""}}]),b}(AbstractSmartDateNumericPart);SmartDateYearPart.MINIMAL_VALUE=1e3,SmartDateYearPart.MAXIMAL_VALUE=9999;var SmartDateParseState=function(){function a(){_classCallCheck(this,a),this._value="",this._valueIndex=0}return _createClass(a,[{key:"start",value:function(a){this._value=a,this._valueIndex=0}},{key:"current",value:function(){return this.isOver()?"":this._value[this._valueIndex]}},{key:"next",value:function(){return!this.isOver()&&(this._valueIndex++,!this.isOver())}},{key:"isOver",value:function(){return this._valueIndex>=this._value.length}},{key:"value",value:function(){return this._value}},{key:"valueIndex",value:function(){return this._valueIndex}},{key:"setValueIndex",value:function(a){this._valueIndex<a&&(this._valueIndex=a)}}]),a}(),SmartDateFormat=function(){function a(b){_classCallCheck(this,a),this._day=null,this._month=null,this._year=null,this.loadFormat(b),this._parseState=new SmartDateParseState}return _createClass(a,[{key:"loadFormat",value:function(a){var b=0,c=a.toLowerCase();for(this._format=a,this._parts=[];b<a.length;)b=this._scanPart(b,a,c)}},{key:"_scanPart",value:function(b,c,d){switch(d[b]){case a.DAY_ANCHOR:return this._scanDay(b,d);case a.MONTH_ANCHOR:return this._scanMonth(b,d);case a.YEAR_ANCHOR:return this._scanYear(b,d);}return this._scanStatic(b,c,d)}},{key:"_scanDay",value:function(b,c){return this._checkLastIsStatic(),this._day=new SmartDateDayPart,this._parts.push(this._day),this._avoidAnchor(a.DAY_ANCHOR,b,c)}},{key:"_scanMonth",value:function(b,c){return this._checkLastIsStatic(),this._month=new SmartDateMonthPart,this._parts.push(this._month),this._avoidAnchor(a.MONTH_ANCHOR,b,c)}},{key:"_scanYear",value:function(b,c){return this._checkLastIsStatic(),this._year=new SmartDateYearPart,this._parts.push(this._year),this._avoidAnchor(a.YEAR_ANCHOR,b,c)}},{key:"_avoidAnchor",value:function(a,b,c){for(var d=b;d<c.length&&c[d]===a;)d++;return d}},{key:"_checkLastIsStatic",value:function(){if(0!==this._parts.length&&!this._parts[this._parts.length-1].isStatic())throw new Error("Dynamic date parts must be separated by static substrings")}},{key:"_scanStatic",value:function(a,b,c){for(var d=a;d<b.length&&this._isStaticAnchorSymbol(c[d]);)d++;return this._parts.push(new SmartDateStaticPart(b.substring(a,d))),d}},{key:"_isStaticAnchorSymbol",value:function(b){return b!==a.DAY_ANCHOR&&b!==a.MONTH_ANCHOR&&b!==a.YEAR_ANCHOR}},{key:"getPlaceHolder",value:function(){for(var a="",b=0;b<this._parts.length;b++)a+=this._parts[b].placeHolder();return a}},{key:"formatDate",value:function(a){for(var b="",c=0;c<this._parts.length;c++)b+=this._parts[c].isStatic()?this._parts[c].placeHolder():this._parts[c].formatDate(a);return b}},{key:"parse",value:function(a,b){this._resetParseState(),this._parseState.start(a),this._parseParts(b),this._correctDate()}},{key:"_resetParseState",value:function(){for(var a=0;a<this._parts.length;a++)this._parts[a].resetState()}},{key:"_parseParts",value:function(a){for(var b=0;b<this._parts.length&&(a||!this._parseState.isOver());){if(this._parts[b].parse(this._parseState),!this._parts[b].isComplete())return;b++}}},{key:"_correctDate",value:function(){this._day.isComplete()&&this._month.isComplete()&&this._day.setMaximalValue(this._getMonthSize(this._month.numericValue()-1,!this._year.isComplete()||this._isLeaPYear(this._year.numericValue())))}},{key:"getParsedDate",value:function(){return this.isComplete()?new Date(this._year.numericValue(),this._month.numericValue()-1,this._day.numericValue()):null}},{key:"_getMonthSize",value:function(b,c){return 0>b||b>=SmartDateMonthPart.MAXIMAL_VALUE?SmartDateMonthPart.MAXIMAL_VALUE:1===b&&c?a.BASIC_MONTH_SIZES[b]+1:a.BASIC_MONTH_SIZES[b]}},{key:"_isLeaPYear",value:function(a){return 0==a%4&&(0!=a%100||0==a%400)}},{key:"getCorrectedValue",value:function(){for(var a=0,b="";a<this._parts.length&&!this._parts[a].isNoState();)b+=this._parts[a].cleanedValue(),a++;return b}},{key:"isComplete",value:function(){return this._parts[this._parts.length-1].isComplete()}}]),a}();SmartDateFormat.DAY_ANCHOR="d",SmartDateFormat.DAY_PLACEHOLDER="\u0414\u0414",SmartDateFormat.MONTH_ANCHOR="m",SmartDateFormat.MONTH_PLACEHOLDER="\u041C\u041C",SmartDateFormat.YEAR_ANCHOR="y",SmartDateFormat.YEAR_PLACEHOLDER="\u0413\u0413\u0413\u0413",SmartDateFormat.BASIC_MONTH_SIZES=[31,28,31,30,31,30,31,31,30,31,30,31];var SmartDateField=function(){function a(b,c){_classCallCheck(this,a),this._dateYmdParser=/^([0-9]{4})[,._\/-]+([0-9]{1,2})[,._\/-]+([0-9]{1,2})$/,this._dateDmyParser=/^([0-9]{1,2})[,._\/-]+([0-9]{1,2})[,._\/-]+([0-9]{4})$/,this._loadOptions(c),this._formatter=new SmartDateFormat(this._format,this._minimalDate,this._maximalDate),this._lastCorrectValue=null===this._defaultDate?null:this._formatter.formatDate(this._defaultDate),this._initField(b),this._subscribeEvents()}return _createClass(a,[{key:"_loadDefaultOptions",value:function(){this._format="d.m.y",this._minimalDate=new Date(1900,0,1),this._maximalDate=new Date(2099,11,31),this._defaultDate=null}},{key:"_loadOptions",value:function(a){if(this._loadDefaultOptions(),"object"===_typeof(a)&&null!=a){if("string"==typeof a.format&&0<=a.format.indexOf("d")&&0<=a.format.indexOf("m")&&0<=a.format.indexOf("y")&&(this._format=a.format),"undefined"!=typeof a.minimal){var b=this._parseDateValue(a.minimal);this._minimalDate=b}if("undefined"!=typeof a.maximal){var c=this._parseDateValue(a.maximal);this._maximalDate=c}if("undefined"!=typeof a["default"]){var d=this._parseDateValue(a["default"]);this._defaultDate=d}this._correctDateOptions()}}},{key:"_correctDateOptions",value:function(){if(this._minimalDate.valueOf()>this._maximalDate.valueOf()){var a=this._minimalDate;this._minimalDate=this._maximalDate,this._maximalDate=a}null===this._defaultDate||(this._defaultDate.valueOf()<this._minimalDate.valueOf()&&(this._defaultDate=this._minimalDate),this._defaultDate.valueOf()>this._maximalDate.valueOf()&&(this._defaultDate=this._maximalDate))}},{key:"_parseDateValue",value:function(a){if("object"===_typeof(a)&&null!==a&&a instanceof Date)return a;if("string"!=typeof a||""===a.trim())return null;var b=this._dateYmdParser.exec(a);return null===b?(b=this._dateDmyParser.exec(a),null===b?null:new Date(+b[3],+b[2]-1,+b[1])):new Date(+b[1],+b[2]-1,+b[3])}},{key:"_initField",value:function(a){this._field=a,this._field.placeholder=this._formatter.getPlaceHolder(),this._isEmptyValue(this._field.value)?this._field.value=null===this._defaultDate?"":this._formatter.formatDate(this._defaultDate):this.correctValue(!0)}},{key:"_subscribeEvents",value:function(){var a=this,b=function(b){(null===b||"keyup"!==b.type)&&a.correctValue(!0),a._isServiceCode(b.keyCode)||(27===b.keyCode&&a.returnLastCorrectValue(),a.correctValue(!0))};this._field.addEventListener("change",b),this._field.addEventListener("keyup",b),this._field.addEventListener("blur",function(){a.correctValue(!0),a._isEmptyValue(a._field.value)||a.returnLastCorrectValue()})}},{key:"_isServiceCode",value:function(a){return 8===a||46===a||16===a||17===a||18===a||20===a||35===a||36===a||37===a||39===a||46===a}},{key:"_isEmptyValue",value:function(a){return""===a.trim()}},{key:"getDefaultValue",value:function(){return null===this._defaultDate?"":this._formatter.formatDate(this._defaultDate)}},{key:"correctValue",value:function(a){this._formatter.parse(this._field.value,a);var b=this._getLimitedParsedValue();this._formatter.isComplete()&&(this._lastCorrectValue=b),this._field.value===b||this._setValueToField(b)}},{key:"setValue",value:function(a){var b=this._parseDateValue(a);null===b||b.valueOf()<this._minimalDate.valueOf()||b.valueOf()>this._maximalDate.valueOf()||(this._lastCorrectValue=this._formatter.formatDate(b),this._field.value=this._lastCorrectValue)}},{key:"_getLimitedParsedValue",value:function(){if(!this._formatter.isComplete())return this._formatter.getCorrectedValue();var a=this._formatter.getParsedDate();return a.valueOf()<this._minimalDate.valueOf()?this._formatter.formatDate(this._minimalDate):a.valueOf()>this._maximalDate.valueOf()?this._formatter.formatDate(this._maximalDate):this._formatter.getCorrectedValue()}},{key:"_setValueToField",value:function(a){var b=this._field.selectionStart,c=b===this._field.value.length;this._field.value=a,!c&&b<this._field.value.length&&(this._field.selectionStart=b,this._field.selectionEnd=b)}},{key:"returnLastCorrectValue",value:function(){null!==this._lastCorrectValue&&(this._field.value=this._lastCorrectValue)}}]),a}();SmartDateField.initBy=function(a){return SmartDateField.initFor(document.getElementById(a))},SmartDateField.initFor=function(a,b){"object"!==_typeof(a)||null===a||"input"!==a.tagName.toLowerCase()||"text"!==a.type.toLowerCase()||"object"===_typeof(a._smartDate)&&null!==a._smartDate&&a._smartDate instanceof SmartDateField||(a._smartDate=new SmartDateField(a,b))},jQuery.fn.smartdate=function(a){for(var b=[],c=null,d=0;d<this.length;d++)c=SmartDateField.initFor(this[d],a),null!==c&&b.push(c);return jQuery(this)},jQuery.fn.setDateValue=function(a){for(var b=0;b<this.length;b++)"object"===_typeof(this[b]._smartDate)&&null!==this[b]._smartDate&&this[b]._smartDate instanceof SmartDateField&&this[b]._smartDate.setValue(a);return jQuery(this)};