{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./wwwroot/calc/calc_lnt/calc.js","webpack:///./wwwroot/calc/common/calculator/utils.js","webpack:///./wwwroot/calc/common/basic_fields.js","webpack:///./wwwroot/calc/common/calculator/calc_complex.js","webpack:///./wwwroot/calc/common/calculator/calc_interface.js","webpack:///./wwwroot/calc/common/calculator/output_fields.js","webpack:///./wwwroot/calc/common/calculator/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","LNTCalculator","_Calculator","_classCallCheck","_callSuper","arguments","_inherits","_createClass","self","this","patchFieldTypes","ShareField","setupStatistic","calcName","addInputField","type","options","maxVal","errors","check","v","selector","isError","precision","exemptionField","increaseCoefField","extraTaxDeductionField","cadastreAreaField","addOutputField","minPrecision","maxPrecision","render","tools","getLocaleNumber","text","trim","cadastreArea","isTaxDeduction","isExtraTaxDeduction","extraTaxDeduction","isIncreaseCoef","isExemption","exemption","loadDescription","ignore","submitOnClick","addResetButton","$","removeClass","addClass","result","_get","_getPrototypeOf","taxSum","share","replace","taxRate","goalParams","args","Ukaz_lgot_land","Lgot_land","Ukaz_povish_koef_land","Ukaz_nalog_vich_land","Ukaz_dop_nalog_vich_lang","Dop_nalog_vich_lang","Dolya_land","Stavka_zemel","message","sendStatisticMessage","sender","autoValidation","$elem","$exemptionCheckbox","$increaseCoefCheckbox","$taxDeductionCheckbox","$extraTaxDeductionInput","$extraTaxDeductionCheckbox","$cadastreAreaInput","is","$inputField","parents","eq","find","$input","focus","select","params","extraTaxDeductionMeter","cadastreValue","period","increaseCoef","Math","round","Calculator","_Field","Number","parseInt","window","elem","val","undefined","indexOf","array","split","divident","divider","toString","arr","percentNum","parseLocaleFloat","floatNum","getValue","fn","shareFilter","on","selectionStart","selectionEnd","simpleVal","lastSymbol","slice","penultSymbol","length","croppedVal","focusin","$field","closest","classList","remove","hide","Field","ShowErrorWay","SHOW_ALL","SHOW_FIRST","selectorOrElem","defaultGetValue","init","valid","deleted","isDynamic","_ignore","f","change","e","keyup","hasClass","getClearValue","defaultValue","set","params_","errClassElem","forEach","err","keepValue","setValue","keepErrors","clearErrors","phase","loud","silent","handler","showErrorWay","show","document","documentMode","tagName","css","_BaseObjectField","deepcopy","clearValue","NumberField","_Field2","blur","isFloat","props","disableProps","console","error","concat","keyName","inputFilter","CountField","_NumberField","parseLocaleInt","setupNumberInput","YearField","_NumberField2","allowSpaces","maxLength","PeriodField","_NumberField3","FloatField","_NumberField4","MoneyField","_FloatField","SelectField","_Field3","itemText","reset","RadioField","_Field4","checkedElem","id","parent","prop","CheckboxField","_Field5","control","checked","TextField","_Field6","removeExtraSpace","raw","escapeTags","fields","_Field7","LinkField","selectedLink","data","click","event","preventDefault","CalculatorComplex","_CalculatorInterface","htmlNode","_this","calc_","$node","scopeEvalFunc","underscore","script","Function","parseNameType","parts","exec","Error","attr","paramString","match","item","splitPos","warn","varName","substr","test","parseFloat","toLowerCase","map","JSON","parse","checkClass","el","class_","getAttribute","autoKey","index","clickOptions","_clickOptions$options","submit","autoSubmit","toggleClasses","toArray","classesObj","toggle","className","add","inputs","_parseNameType","outputs","_parseNameType2","renderCode","x","keys","checkHash","obj","path","_this2","gentle","Array","isArray","writePath","target","part","id_","clearPart","some","__id","push","body","fetchRootElem","findExternalOnly","$table","table","$dataExpandableDiv","elements","createClone","$template","$lastRow","last","$clone","querySelector","cloneNode","_id","genUniqueId","blockPiece","filter","removed","keepOne","beforeRemoval","field","afterRemoval","isFilled","artifacts","getFieldsFlat","getElements","tree","removeFirstEvent","dontSubmitOnRemove","submitForm","_submitOnChange","fetchFields","_ref","_ref2","_slicedToArray","fieldParams","_objectSpread","disabledSubmitting","removeSelector","first","anchor","prepareTemplate","block","_params$prepareTempla","insertAdjacentElement","removePathId","appendButtonSelector","$this","$expandableDiv","keepTable","bp","delete","ignoredEmptyFields","ignoreForEmpty","setCount","_ref3","count","_ref3$removeStrategy","removeStrategy","currentCount","_dynamicFields","nameOrNames","checker","fieldGroups","getFields","resList","inputFields","__tmpIgnore","isPathInside","checkField","df","a","newOptions","_this3","newValues","irregularValueNames","reduce","acc","log","clearPath","_exportObject","ignoreList","accum","filled","defaultFilled","enableResetButton","hasValueChanges","fieldsToParse","ignoreCouseEmpty","showReset","resetValuesOnIgnore","unsilence","senderField","apply","_toConsumableArray","res","errorIsVisible","getExportValue","afterFirstPhaseCheck","newValuesString","stringify","lastValuesString","group","processGroup","afterParse","forceRender","skipValueChangesCheck","isActive","notes","beforeSubmit","parsing","resetButtons","_statistic","startedSent","isReady","calculateForValidOnly","toggleCustomClasses","calcValid","calculate","beforeRender","_exportObjectFinal","generateExportObject","showResults","hideResults","renderError","afterSubmit","CalculatorInterface","debug","_fieldTypes","outputFields","forceOutputs","_inputFieldsTree","view","hash","newFieldTypes","string_or_object","hideOnDefault","random","srcPath","BaseOutputField","calculator","container","setup","paramName","renderFunc","compose","renderMethod","compose_","exportObject","RenderRequiredOutputField","_BaseOutputField","HtmlOutputField","_BaseOutputField2","_HtmlOutputField","LocaleNumOutputField","_BaseOutputField3","LocaleSumOutputField","_BaseOutputField4","getLocaleSum","MoneyRubleOutputField","_HtmlOutputField2","getLocaleSumInRubbles","MoneyTextOutputField","_BaseOutputField5","verboseNumber","MoneyRoundedRubleField","_HtmlOutputField3","getRoundedNumberInRubbles","MoneyRoundedRubleOutputField","_HtmlOutputField4","PeriodOutputField","_BaseOutputField6","from_","dateFrom","toLocaleFormat","to_","dateTo","duration","inDays","verboseCountingValue","DateOutputField","_BaseOutputField7","DayOutputField","_BaseOutputField8","PercentOutputField","_HtmlOutputField5","NoteOutputField","_RenderRequiredOutput","convertElemToTextWithLinksForExport","ExportVisibleOutputField","_BaseOutputField9","htmlObject","ToggleOutputField","_RenderRequiredOutput2","slideUpTime","slideUp","slideDownTime","slideDown","ConditionalBlockOutputField","_RenderRequiredOutput3","alternativeBlockSelector","alternativeBlock","ShareOutputField","_HtmlOutputField6","MoneyLocalRoundedOutField","_HtmlOutputField7","getRoundedNumber","createOutputField","_CalculatorComplex","basicFields","showVersionBanner","ShowVersionBanner","setupVersionBanner","setupHandlers","autoAddFields","initialize","_console","_$","_$2","_$3","_$4","print","printMessage","formData","FormData","append","ajax","url","ExportWordHost","processData","contentType","cache","xhr","XMLHttpRequest","onloadstart","ev","responseType","success","response","textStatus","jQxhr","decodeURI","getResponseHeader","blob","Blob","navigator","msSaveOrOpenBlob","link","createElement","download","href","URL","createObjectURL","exportMessage","location","history","pushState","title","pathname","getHash","RegExp","substring","feedbackBottom","Promise","resolve","reject","load","code","DataVersionSalt","each","initSmartLink","setWarningMessage","IsAuthEnabled","mailSubject","html","prepend","isStartedEventIgnore","prefix","ym","ymId","ymReachGoal","resetInputFields","dynamic","addDynamicField","ftype","_detectFieldType","_makeFieldObject","disableAutoCheck","onChange","preInit","ft","detect","fieldType","onReset","forced","orderedFields","priorities","sort","b","renderExport","customClass"],"mappings":"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","file":"calc/calc_lnt/calc.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1162);\n","import { Calculator } from \"../common/calculator\";\r\nimport { Field } from \"../common/basic_fields.js\";\r\n\r\nclass LNTCalculator extends Calculator {\r\n code() { return \"lnt\"; }\r\n type() { return \"CalcLandTax\"; }\r\n\r\n initialize() {\r\n let self = this;\r\n this.patchFieldTypes([ShareField]);\r\n this.setupStatistic({\r\n calcName: 'land_tax'\r\n });\r\n\r\n // add input fields\r\n this.addInputField('#cadastreValueInput input', 'cadastreValue', {\r\n type: 'money', options: { maxVal: 999999999999.99 },\r\n errors: [{ check: function (v) { return !!v; }, selector: '#cadastreValueInput .error-text' }]\r\n });\r\n this.addInputField('#shareInput input', 'share', {\r\n type: 'share',\r\n errors: [\r\n { check: function (v) { return !!v; }, selector: '#shareInput .null-error' },\r\n { check: function (v) { return !(v && v.isError); }, selector: '#shareInput .wrong-error' }\r\n ]\r\n });\r\n this.addInputField('#taxRateInput input', 'taxRate', {\r\n type: 'float', options: { precision: 4 },\r\n errors: [\r\n { check: function (v) { return !!v; }, selector: '#taxRateInput .null-error' },\r\n { check: function (v) { return !(v && ((v < 0.01) || (v > 1.5))); }, selector: '#taxRateInput .wrong-error' }\r\n ]\r\n });\r\n this.exemptionField = this.addInputField('#exemptionInput .base-input', 'exemption', {\r\n type: 'float', options: { precision: 4, maxVal: 100 }\r\n });\r\n this.increaseCoefField = this.addInputField(\"#increaseCoefInput dropdown-select\", 'increaseCoef');\r\n this.extraTaxDeductionField = this.addInputField('#extraTaxDeductionInput .base-input', 'extraTaxDeduction', {\r\n type: 'float', options: { precision: 4, maxVal: 100 }\r\n });\r\n this.cadastreAreaField = this.addInputField('#cadastreAreaInput input', 'cadastreArea', {\r\n type: 'float', options: { precision: 2 },\r\n errors: [{ check: function (v) { return !!v; }, selector: '#cadastreAreaInput .error-text' }]\r\n });\r\n\r\n // add output fields\r\n this.addOutputField('.tax-rate-render', 'taxRate', { type: 'percent', minPrecision: 0, maxPrecision: 4 });\r\n this.addOutputField('.exemption-render', 'exemption', { type: 'percent', minPrecision: 0, maxPrecision: 4 });\r\n this.addOutputField('.extra-tax-deduction-render', 'extraTaxDeduction', { type: 'percent', minPrecision: 0, maxPrecision: 4 });\r\n this.addOutputField('.cadastre-area-render', 'cadastreArea', { type: 'area', render: function (r) { return tools.getLocaleNumber(r) + ' кв. м' } });\r\n this.addOutputField('.extra-tax-deduction-meter-render', 'extraTaxDeductionMeter', { type: 'area', render: function (r) { return tools.getLocaleNumber(r) + ' кв. м' } });\r\n this.addOutputField('.share-render', 'share', { type: 'share', render: function (r) { return r.text.trim() } });\r\n\r\n this.addOutputField('.cadastre-area-block', '', {\r\n type: 'toggle', render: function () {\r\n return self.cadastreArea && self.cadastreArea > 0 &&\r\n (self.isTaxDeduction || (self.isExtraTaxDeduction && self.extraTaxDeduction && self.extraTaxDeduction > 0))\r\n }\r\n });\r\n this.addOutputField('.increase-coef-block', '', { type: 'toggle', render: function () { return self.isIncreaseCoef } });\r\n this.addOutputField('.exemption-block', '', { type: 'toggle', render: function () { return self.isExemption && self.exemption && self.exemption > 0 } });\r\n this.addOutputField('.tax-deduction-block', '', { type: 'toggle', render: function () { return self.isTaxDeduction && self.cadastreArea && self.cadastreArea > 0 } });\r\n this.addOutputField('.extra-tax-deduction-block', '', { type: 'toggle', render: function () { return self.isExtraTaxDeduction && self.extraTaxDeduction && self.extraTaxDeduction > 0 && self.cadastreArea && self.cadastreArea > 0 } });\r\n\r\n this.loadDescription();\r\n\r\n this.cadastreAreaField.ignore = true;\r\n\r\n this.submitOnClick('#calcSubmit');\r\n this.addResetButton(\"#clearCalcInput\");\r\n }\r\n\r\n onReset() {\r\n $('.calc-div-results').removeClass('show-results');\r\n\r\n $('#exemptionInput .field-div').addClass('hidden-control');\r\n $('#increaseCoefInput .field-div').addClass('hidden-control');\r\n $('#increaseCoefInput .field-div').addClass('hidden-control');\r\n $('#extraTaxDeductionInput .field-div').addClass('hidden-control');\r\n $('#cadastreAreaInput').addClass('hidden-control');\r\n\r\n this.cadastreAreaField.ignore = true;\r\n }\r\n\r\n\r\n generateExportObject() {\r\n let result = super.generateExportObject();\r\n result.taxSum = this.taxSum;\r\n result.share = this.share.text.replace(' ', ' ');\r\n result.taxRate = this.taxRate;\r\n result.extraTaxDeduction = this.extraTaxDeduction;\r\n result.exemption = this.exemption;\r\n result.cadastreArea = this.cadastreArea;\r\n \r\n return result;\r\n }\r\n\r\n showResults() {\r\n super.showResults();\r\n\r\n var goalParams = {\r\n args: {\r\n Ukaz_lgot_land: this.isExemption,\r\n Lgot_land: this.isExemption ? this.exemption : null,\r\n Ukaz_povish_koef_land: this.isIncreaseCoef,\r\n Ukaz_nalog_vich_land: this.isTaxDeduction,\r\n Ukaz_dop_nalog_vich_lang: this.isExtraTaxDeduction,\r\n Dop_nalog_vich_lang: this.isExtraTaxDeduction ? this.extraTaxDeduction : null,\r\n Dolya_land: this.share.text === \"100%\" ? false : true,\r\n Stavka_zemel: this.taxRate\r\n },\r\n message: 'Is_Made'\r\n };\r\n this.sendStatisticMessage(goalParams);\r\n }\r\n\r\n afterParse(sender, autoValidation) {\r\n let self = this;\r\n let $elem = $(sender);\r\n let $exemptionCheckbox = $(\"#exemptionInput .checkboxrow\");\r\n let $increaseCoefCheckbox = $(\"#increaseCoefInput .checkboxrow\");\r\n let $taxDeductionCheckbox = $(\"#taxDeductionInput\");\r\n let $extraTaxDeductionInput = $(\"#extraTaxDeductionInput .base-input\");\r\n let $extraTaxDeductionCheckbox = $(\"#extraTaxDeductionInput .checkboxrow\");\r\n let $cadastreAreaInput = $(\"#cadastreAreaInput\");\r\n\r\n if ($elem.is($exemptionCheckbox) || $elem.is($increaseCoefCheckbox) || $elem.is($extraTaxDeductionCheckbox) || $elem.is($taxDeductionCheckbox)) {\r\n if ($elem.is($taxDeductionCheckbox) || $elem.is($extraTaxDeductionCheckbox)) {\r\n if (this.isTaxDeduction || this.isExtraTaxDeduction) {\r\n $cadastreAreaInput.removeClass('hidden-control');\r\n if (this.isTaxDeduction || (this.isExtraTaxDeduction && this.extraTaxDeduction)) {\r\n this.cadastreAreaField.ignore = false;\r\n } else {\r\n this.cadastreAreaField.ignore = true;\r\n }\r\n } else {\r\n $cadastreAreaInput.addClass('hidden-control');\r\n this.cadastreAreaField.ignore = true;\r\n }\r\n }\r\n\r\n var $checkboxInput = $elem.parents('div .edge-padding').eq(0);\r\n var $inputField = $checkboxInput.find('.field-div');\r\n if ($elem.find('input').is(':checked')) {\r\n $inputField.removeClass('hidden-control');\r\n\r\n if ($elem.is($extraTaxDeductionCheckbox) || $elem.is($exemptionCheckbox)) {\r\n var $input = $inputField.find('input');\r\n if ($input) {\r\n $input.focus();\r\n $input.select();\r\n }\r\n }\r\n }\r\n else {\r\n $inputField.addClass('hidden-control');\r\n }\r\n } else if ($elem.is($extraTaxDeductionInput)) {\r\n if ((this.isExtraTaxDeduction && this.extraTaxDeduction) || this.isTaxDeduction) {\r\n this.cadastreAreaField.ignore = false;\r\n } else {\r\n this.cadastreAreaField.ignore = true;\r\n }\r\n }\r\n }\r\n\r\n calculate(params) {\r\n if (params.autoValidation) {\r\n return false;\r\n }\r\n\r\n let self = this;\r\n\r\n var share = this.share.value;\r\n if (this.cadastreArea && this.cadastreArea > 0 &&\r\n (this.isTaxDeduction || (this.isExtraTaxDeduction && this.extraTaxDeduction && this.extraTaxDeduction > 0))) {\r\n\r\n share = this.cadastreArea * this.share.value;\r\n\r\n if (this.isTaxDeduction) {\r\n share = share - 600;\r\n }\r\n\r\n if (this.isExtraTaxDeduction) {\r\n self.extraTaxDeductionMeter = this.cadastreArea * this.extraTaxDeduction / 100;\r\n share = share - self.extraTaxDeductionMeter;\r\n }\r\n share /= this.cadastreArea;\r\n }\r\n\r\n if (share < 0) {\r\n self.taxSum = 0;\r\n } else {\r\n var taxSum = this.cadastreValue * (this.taxRate / 100) * (this.period.value / 12) * share;\r\n\r\n if (this.isExemption && this.exemption && this.exemption > 0) {\r\n taxSum = taxSum * (1 - this.exemption / 100);\r\n }\r\n\r\n if (this.isIncreaseCoef) {\r\n taxSum = taxSum * this.increaseCoef.value;\r\n }\r\n\r\n self.taxSum = Math.round(taxSum);\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nclass ShareField extends Field {\r\n static keyName() { return 'share'; }\r\n getValue() {\r\n if (!Number.parseInt) {\r\n Number.parseInt = window.parseInt\r\n }\r\n\r\n var result = {};\r\n result.text = this.elem.val();\r\n result.value = undefined;\r\n result.isError = false;\r\n\r\n if (!result.text) {\r\n return null;\r\n } else if (result.text.indexOf('/') !== -1) {\r\n var array = result.text.split('/');\r\n var divident = parseInt(array[0], 10);\r\n var divider = array[1] !== '' ? parseInt(array[1], 10) : null;\r\n\r\n if (divider === null) {\r\n result.value = 1;\r\n result.text = divident.toString();\r\n } else {\r\n result.value = divident / divider;\r\n result.text = divident.toString() + '/' + divider.toString();\r\n }\r\n\r\n if (!divident || !divider || divident > divider) {\r\n result.isError = true;\r\n }\r\n } else if ((result.text.indexOf('.') !== -1 || result.text.indexOf(',') !== -1) && result.text.indexOf('%') === -1) {\r\n var floatNum = tools.parseLocaleFloat(result.text);\r\n\r\n result.value = floatNum;\r\n result.text = tools.getLocaleNumber(floatNum).toString();\r\n\r\n if (result.value === undefined || result.value > 1.0) {\r\n result.isError = true;\r\n }\r\n } else if (result.text.indexOf('%') !== -1) {\r\n var arr = result.text.split('%');\r\n var percentNum = tools.parseLocaleFloat(arr[0].replace(/\\s+/g, ''));\r\n\r\n result.value = percentNum / 100;\r\n result.text = tools.getLocaleNumber(percentNum).toString() + '%';\r\n \r\n if (!percentNum || percentNum > 100) {\r\n result.isError = true;\r\n }\r\n } else {\r\n result.value = parseInt(result.text, 10);\r\n result.text = result.value.toString();\r\n\r\n if (result.value === 0) {\r\n return null;\r\n }\r\n else if (result.value !== 1) {\r\n result.isError = true;\r\n }\r\n }\r\n this.elem.val(result.text);\r\n\r\n return result;\r\n }\r\n getClearValue() { return this.getValue() ? this.getValue().text : null; }\r\n setValue(v) { this.elem.val(v); }\r\n init() {\r\n $.fn.shareFilter = function () {\r\n return this.on(\"input keydown keyup mousedown mouseup select contextmenu drop\", function () {\r\n var newSelectionStart = this.selectionStart;\r\n var newSelectionEnd = this.selectionEnd;\r\n\r\n var simpleVal = this.value.replace(/[^\\dр.,\\/юб%]/g, '')\r\n .replace(/[р,\\юб]/g, '.') // replace all separators with dot\r\n .replace(/\\.+/g, '.').replace('.', ',').replace(/\\./g, '') // remove doubled dots, leave first dot (comma) only\r\n .replace(/\\/+/g, '/')\r\n .replace(/\\%+/g, '%')\r\n .replace(/^0+/, '0'); // remove leading zeros\r\n\r\n if (simpleVal[0] === ',') {\r\n simpleVal = '0' + simpleVal;\r\n }\r\n else if (simpleVal[0] === '/') {\r\n simpleVal = '1' + simpleVal;\r\n }\r\n\r\n var lastSymbol = simpleVal.slice(-1);\r\n var penultSymbol = simpleVal[simpleVal.length - 2];\r\n var croppedVal = simpleVal.slice(0, -1);\r\n\r\n if (lastSymbol === '/' && (croppedVal.indexOf('/') !== -1 || croppedVal.indexOf('%') !== -1 || croppedVal.indexOf(',') !== -1)) {\r\n simpleVal = croppedVal;\r\n }\r\n else if (lastSymbol === '%' && (croppedVal.indexOf('/') !== -1 || croppedVal.indexOf('%') !== -1)) {\r\n simpleVal = croppedVal;\r\n }\r\n else if (lastSymbol === ',' && (croppedVal.indexOf('/') !== -1 || croppedVal.indexOf('%') !== -1)) {\r\n simpleVal = croppedVal;\r\n }\r\n\r\n if (penultSymbol === '%') {\r\n simpleVal = croppedVal;\r\n }\r\n\r\n this.value = simpleVal;\r\n });\r\n };\r\n\r\n this.elem.focusin(function () {\r\n var $field = $(this).closest('div.field-div');\r\n this.classList.remove('err');\r\n $field.find(\".error-text\").hide();\r\n $field.find(\"input\").shareFilter();\r\n });\r\n }\r\n}\r\n\r\n$(function () {\r\n var calc = new LNTCalculator();\r\n});","var ShowErrorWay = {\r\n SHOW_ALL: 1,\r\n SHOW_FIRST: 2\r\n}\r\n\r\nexport { ShowErrorWay };","import { ShowErrorWay } from \"./calculator/utils.js\";\r\n\r\n\r\n/*\r\n * To define new field type create class which extends Field class\r\n */\r\nclass Field {\r\n constructor(selectorOrElem, options) {\r\n this.elem = $(selectorOrElem);\r\n this.options = options;\r\n this.defaultGetValue = options && 'defaultGetValue' in options ? options.defaultGetValue : null;\r\n this.init();\r\n this.valid = true;\r\n this.deleted = false;\r\n this.isDynamic = false;\r\n this._ignore = false;\r\n }\r\n\r\n // this method is required for matching type with class\r\n static keyName() { return ''; }\r\n\r\n getValue() { return undefined; }\r\n setValue(v) { }\r\n\r\n // this method is required for automatic calculation of defaultValue\r\n getClearValue() { return this.getValue(); }\r\n\r\n // this method is required for automatic export build\r\n getExportValue() { return this.getValue(); }\r\n\r\n // additional field setup\r\n init() { }\r\n\r\n // for silent check (send sender as argument of function f)\r\n onChange(f) {\r\n let self = this;\r\n this.elem.change(function (e) { f(self.elem[0]); });\r\n if (this.options && this.options.keyup) {\r\n this.elem.keyup(function (e) { f(self.elem[0]); });\r\n }\r\n return this.elem;\r\n }\r\n\r\n // allows showing reset button for ignored fields\r\n showReset() { return false; }\r\n\r\n // for auto detecting type\r\n static detect(elem) { return false; }\r\n\r\n errorIsVisible() { return this.elem.hasClass('err') || this.elem.find('.err').length > 0; }\r\n isFilled() { return this.getClearValue() !== this.defaultValue; }\r\n\r\n\r\n delete() {\r\n this.deleted = true;\r\n }\r\n\r\n get ignore() { return this._ignore; }\r\n set ignore(val) { this._ignore = val; }\r\n\r\n clearErrors() {\r\n const errClassElem = (this.params_.errClassElem === undefined ? this.elem : $(this.params_.errClassElem));\r\n errClassElem.removeClass('err');\r\n if (this.params_.errors !== undefined) {\r\n this.params_.errors.forEach(function (err) {\r\n if (err.errClassElem !== undefined)\r\n $(err.errClassElem).removeClass('err');\r\n $(err.selector).hide();\r\n });\r\n }\r\n }\r\n\r\n reset(params) {\r\n params = params || {};\r\n if (!params.keepValue) {\r\n this.setValue(this.defaultValue);\r\n }\r\n if (!params.keepErrors) {\r\n this.clearErrors();\r\n }\r\n }\r\n\r\n check(autoValidation, sender, phase, loud ) {\r\n if (phase < 2) {\r\n const silent = autoValidation && sender != this.elem[0] && !loud;\r\n const self = this.elem[0];\r\n let valid = true;\r\n if (this.params_.errors !== undefined) {\r\n const handler = (this.params_.showErrorWay == ShowErrorWay.SHOW_ALL ? 'forEach' : 'some');\r\n const v = this.getValue();\r\n const errClassElem = (this.params_.errClassElem === undefined ? this.elem : $(this.params_.errClassElem));\r\n if (!silent) this.clearErrors();\r\n this.params_.errors[handler](function (err) {\r\n if (!err.check(v, autoValidation)) {\r\n if (!silent) {\r\n $(err.selector).show();\r\n // fix for shadow DOM in ie\r\n if (window.document.documentMode && self.tagName == \"SUMMARY-INPUT\")\r\n $(err.selector).css('display', 'block');\r\n if (err.errClassElem !== undefined)\r\n $(err.errClassElem).addClass('err');\r\n else\r\n errClassElem.addClass('err');\r\n }\r\n valid = false;\r\n return true;\r\n }\r\n });\r\n }\r\n return valid;\r\n }\r\n return true;\r\n };\r\n}\r\n\r\n\r\nclass _BaseObjectField extends Field {\r\n getClearValue() { return tools.deepcopy(this.elem[0].value); }\r\n getValue() { return this.elem.val(); }\r\n setValue(v) { this.elem.val(v); }\r\n getExportValue() { return this.elem.val(); }\r\n isFilled() {\r\n const clearValue = this.getClearValue();\r\n for (const key in clearValue) {\r\n if (clearValue[key] !== this.defaultValue[key])\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n\r\nclass NumberField extends Field {\r\n static keyName() { return ''; }\r\n getClearValue() { return this.elem.val() === \"\" ? \"\" : this.getValue(); }\r\n setValue(v) { this.elem.val(v); }\r\n onChange(f) {\r\n let self = this;\r\n if (window.document.documentMode) {\r\n this.elem.blur(function (e) { f(self.elem[0]); });\r\n } else {\r\n this.elem.change(function (e) { f(self.elem[0]); });\r\n }\r\n if (this.options && this.options.keyup) {\r\n this.elem.keyup(function (e) { f(self.elem[0]); });\r\n }\r\n return this.elem;\r\n }\r\n setupNumberInput(isFloat, props, disableProps) {\r\n let self = this;\r\n disableProps = disableProps || [];\r\n if (this.options) {\r\n [\"maxVal\", \"minVal\", \"precision\"].forEach(function (name) {\r\n if (self.options[name] !== undefined) {\r\n if (disableProps.indexOf(name) >= 0) {\r\n console.error(`Prop ${name} is not allowed in field of type \"${self.keyName()}\"`);\r\n }\r\n else {\r\n props[name] = self.options[name];\r\n }\r\n }\r\n });\r\n }\r\n const $field = this.elem.closest('div.field-div');\r\n $field.find(\"input.base-input\").inputFilter(isFloat, props);\r\n this.elem.focusin(function () {\r\n this.classList.remove('err');\r\n $field.find(\".error-text\").hide();\r\n });\r\n }\r\n}\r\n\r\n\r\nclass CountField extends NumberField {\r\n static keyName() { return 'count'; }\r\n getValue() { return this.elem.val() ? tools.parseLocaleInt(this.elem.val()) : this.defaultGetValue; }\r\n init() { this.setupNumberInput(false, {}, ['precision']); }\r\n}\r\n\r\n\r\nclass YearField extends NumberField {\r\n static keyName() { return 'year'; }\r\n getValue() { return this.elem.val() ? tools.parseLocaleInt(this.elem.val()) : this.defaultGetValue; }\r\n init() { this.setupNumberInput(false, { allowSpaces: false, maxLength: 4 }, ['precision']); }\r\n}\r\n\r\n\r\nclass PeriodField extends NumberField {\r\n static keyName() { return 'period'; }\r\n getValue() { return this.elem.val() ? tools.parseLocaleInt(this.elem.val()) : this.defaultGetValue; }\r\n init() { this.setupNumberInput(false, { allowSpaces: false }, ['precision']); }\r\n}\r\n\r\n\r\nclass FloatField extends NumberField {\r\n static keyName() { return 'float'; }\r\n getValue() { return this.elem.val() ? tools.parseLocaleFloat(this.elem.val()) : this.defaultGetValue; }\r\n init() { this.setupNumberInput(true, {precision: 3}); }\r\n}\r\n\r\n\r\nclass MoneyField extends FloatField {\r\n static keyName() { return 'money'; }\r\n init() { this.setupNumberInput(true, {}, ['precision']); }\r\n}\r\n\r\n\r\nclass SelectField extends Field {\r\n static keyName() { return 'select'; }\r\n getValue() {\r\n return { value: this.elem[0].value, text: this.elem[0].itemText };\r\n }\r\n setValue(v) { this.elem.val(v); }\r\n init() {\r\n let self = this;\r\n this.elem.focusin(function () {\r\n var $field = $(this).closest('div.field-div');\r\n self.elem.removeClass('err');\r\n $field.find(\".error-text\").hide();\r\n });\r\n }\r\n onChange(f) {\r\n let self = this;\r\n return this.elem.change(function (e) { f(self.elem[0]); });\r\n }\r\n getClearValue() { return this.getValue().value; }\r\n getExportValue() { return this.getValue().text; }\r\n reset(params) {\r\n params = params || {};\r\n if (!params.keepValue) {\r\n this.elem[0].reset(this.defaultValue);\r\n }\r\n if (!params.keepErrors) {\r\n this.clearErrors();\r\n }\r\n }\r\n static detect(elem) {\r\n return elem[0].tagName === 'DROPDOWN-SELECT';\r\n }\r\n}\r\n\r\n\r\nclass RadioField extends Field {\r\n static keyName() { return 'radio'; }\r\n getValue() {\r\n var checkedElem = this.elem.find('input:checked');\r\n if (checkedElem.length > 0) {\r\n return { value: checkedElem[0].id, text: checkedElem.parent().find(\"label\").text() };\r\n }\r\n return undefined;\r\n }\r\n setValue(v) { this.elem.find('input#' + v).prop(\"checked\", true); }\r\n onChange(f) {\r\n let self = this;\r\n return this.elem.find('input').change(function (e) { f(self.elem[0]); });\r\n }\r\n getClearValue() { return this.getValue().value; }\r\n getExportValue() { return this.getValue().text; }\r\n static detect(elem) {\r\n return elem.find('.radio-elem').length > 0;\r\n }\r\n}\r\n\r\n\r\nclass CheckboxField extends Field {\r\n static keyName() { return 'checkbox'; }\r\n getValue() { return this.control.checked; }\r\n setValue(v) {this.control.checked = v; }\r\n init() {\r\n this.control = this.elem.find('input[type=\"checkbox\"]')[0];\r\n }\r\n onChange(f) {\r\n let self = this;\r\n return this.elem.find('input[type=\"checkbox\"]').change(function (e) {f(self.elem[0]); });\r\n }\r\n static detect(elem) {\r\n return elem.find('input[type=\"checkbox\"]').length == 1;\r\n }\r\n}\r\n\r\nclass TextField extends Field {\r\n static keyName() { return 'text'; }\r\n getClearValue() { return this.elem.val();}\r\n getValue() {\r\n const val = tools.removeExtraSpace(this.elem.val());\r\n return (this.options && this.options.raw ? val : tools.escapeTags(val));\r\n }\r\n setValue(v) { this.elem.val(v); }\r\n isFilled() { return false; }\r\n}\r\n\r\nclass LinkField extends Field {\r\n static keyName() { return 'link'; }\r\n getValue() {\r\n const selectedLink = this.elem.find('a.selected-link');\r\n if (selectedLink.length > 0) {\r\n return selectedLink.data(\"type\");\r\n }\r\n return undefined;\r\n }\r\n setValue(v) { this.elem.find(`a[data-type=\"${v}\"]`).addClass(\"selected-link\"); }\r\n init() {\r\n const self = this;\r\n this.elem.find('a').click(function (event) {\r\n event.preventDefault();\r\n self.elem.find('a').removeClass('selected-link');\r\n $(this).addClass('selected-link');\r\n return false;\r\n });\r\n }\r\n onChange(f) {\r\n let self = this;\r\n return this.elem.find('a').click(function (e) { f(self.elem[0]); });\r\n }\r\n getClearValue() { return this.getValue(); }\r\n getExportValue() { return this.getValue(); }\r\n reset(params) {\r\n this.elem.find('a').removeClass('selected-link');\r\n this.setValue(this.defaultGetValue);\r\n }\r\n static detect(elem) {\r\n return elem.find('a.selected-link').length > 0;\r\n }\r\n}\r\n\r\nconst fields = [MoneyField, FloatField, SelectField, RadioField, CountField, YearField, PeriodField, CheckboxField, TextField, LinkField];\r\n\r\nexport { fields, Field, _BaseObjectField, RadioField, TextField, FloatField };\r\n","import { CalculatorInterface } from \"./calc_interface.js\"\r\n\r\n\r\nexport class CalculatorComplex extends CalculatorInterface {\r\n /**\r\n * Scans document or node (if htmlNode is set)\r\n * @param {any} htmlNode - set if you need to scan fields inside specific node (useful for dynamic content)\r\n * @returns {Object} {inputs, outputs}\r\n */\r\n fetchFields(htmlNode) {\r\n const calc_ = this;\r\n if (htmlNode == undefined)\r\n htmlNode = document;\r\n const $node = $(htmlNode);\r\n\r\n function scopeEvalFunc(underscore, script) {\r\n return new Function(`\"use strict\"; const cc = this; const _ = cc[\"${underscore}\"]; return ${script};`).bind(calc_);\r\n }\r\n\r\n function parseNameType(text) {\r\n const parts = /^(\\[(.*?)\\])?([^\\[\\]\\:]+)(\\:(.+))?$/g.exec(text);\r\n if (parts === null) {\r\n throw new Error(`Incorrect format for cc:input value (\"${attr}\"). Must be \"name\" or \"[type]name\"`);\r\n }\r\n const paramString = parts[5];\r\n const options = (parts[2] !== undefined ? { type: parts[2] } : {});\r\n\r\n if (paramString !== undefined) {\r\n paramString.match(/(?:[^,\\s\\[]+(?:\\[.*?\\])?)(?=\\s*,|\\s*$)/g).forEach(item => {\r\n const splitPos = item.indexOf('=');\r\n if (splitPos < 0) {\r\n console.warn(`Incorrect option value '${item}'. Must be something like 'option=value'. Ignoring...`);\r\n return false;\r\n }\r\n const varName = item.substr(0, splitPos);\r\n let value = item.substr(splitPos + 1);\r\n\r\n if (/^\\d+$/.test(value)) {\r\n value = parseInt(value);\r\n }\r\n else if (/^\\d+(\\.\\d+)?$/.test(value)) {\r\n value = parseFloat(value);\r\n }\r\n else if (/^false|true$/i.test(value)) {\r\n value = (value.toLowerCase() === 'true');\r\n }\r\n else if (/^\\[.*\\]$/.test(value)) {\r\n value = value.slice(1, -1).split(',').map(e => e.trim());\r\n }\r\n else {\r\n try {\r\n value = JSON.parse(value);\r\n } catch (e) {}\r\n }\r\n\r\n options[varName] = value;\r\n });\r\n }\r\n return { name: parts[3], options };\r\n }\r\n\r\n function checkClass(el) {\r\n const class_ = $(el).closest('[cc\\\\:class]');\r\n if (class_.length > 0 && class_[0].getAttribute('cc:class') !== calc_.autoKey()) {\r\n return false;\r\n }\r\n const inTemplate = $(el).closest('.template-list-row').length > 0;\r\n return !inTemplate;\r\n }\r\n\r\n $node.find('[cc\\\\:click]').map((index, el) => {\r\n if(checkClass(el)){\r\n const self = this;\r\n const clickOptions = parseNameType(el.getAttribute('cc:click'));\r\n $(el).on('click', function () {\r\n const result = scopeEvalFunc('_', clickOptions.name)();\r\n if (clickOptions?.options?.submit !== false){\r\n self.autoSubmit(null, true); \r\n }\r\n return result;\r\n });\r\n }\r\n });\r\n\r\n this.toggleClasses = $node.find('[cc\\\\:classname]').toArray().map(el => {\r\n const attr = el.getAttribute(\"cc:classname\");\r\n const classesObj = JSON.parse(attr);\r\n \r\n return {\r\n toggle: () => {\r\n for(let className in classesObj) {\r\n const condition = classesObj[className];\r\n if (scopeEvalFunc('_', condition)()) {\r\n el.classList.add(className);\r\n } else {\r\n el.classList.remove(className);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n return {\r\n inputs: $node.find('[cc\\\\:input]').toArray().map(el => {\r\n if (checkClass(el)) {\r\n const attr = el.getAttribute('cc:input');\r\n const { name, options } = parseNameType(attr);\r\n return [el, name, options];\r\n } else {\r\n return null;\r\n }\r\n }),\r\n outputs: $node.find('[cc\\\\:output]').toArray().map(el => {\r\n if (checkClass(el)) {\r\n const attr = el.getAttribute('cc:output');\r\n let { name, options } = parseNameType(attr);\r\n const renderCode = el.getAttribute('cc:render');\r\n\r\n if (renderCode !== null) {\r\n options.render = function (x) { return scopeEvalFunc(name, renderCode)(); }\r\n }\r\n\r\n if (Object.keys(options).length === 0)\r\n options = undefined;\r\n\r\n return [el, name, options];\r\n } else {\r\n return null;\r\n }\r\n }).concat($node.find('[cc\\\\:if]').toArray().map(el => {\r\n if (checkClass(el)) {\r\n \r\n let attr = el.getAttribute('cc:if');\r\n if (attr[0] == '@') {\r\n attr = $(attr.substr(1))[0].getAttribute('cc:if');\r\n }\r\n return [el, \"\", { type: \"toggle\", render: function () { return scopeEvalFunc('_', attr)(); } }];\r\n } else {\r\n return null;\r\n }\r\n })).concat($node.find('[cc\\\\:ifhash]').toArray().map(el => {\r\n if(checkClass(el)){\r\n let attr = el.getAttribute('cc:ifHash');\r\n let self = this;\r\n\r\n return [el, \"\", { type: \"toggle\", render: function () { \r\n return self.checkHash(attr);\r\n } }];\r\n }\r\n return null;\r\n })).concat($node.find('[cc\\\\:forceif]').toArray().map(el => {\r\n if (checkClass(el)) {\r\n let attr = el.getAttribute('cc:forceIf');\r\n if (attr[0] == '@') {\r\n attr = $(attr.substr(1))[0].getAttribute('cc:forceif');\r\n }\r\n return [el, \"\", {type: \"toggle\", render: function () {return scopeEvalFunc('_', attr)();}}, true];\r\n } else {\r\n return null;\r\n }\r\n })),\r\n }\r\n }\r\n \r\n\r\n writePath(obj, path, value, gentle=false) {\r\n if (Array.isArray(obj)) {\r\n obj.forEach(o => this.writePath(o, path, value, gentle));\r\n return;\r\n }\r\n\r\n let parts = path.split('.');\r\n let target = obj;\r\n parts.forEach(function (part, index) {\r\n if (target !== null) {\r\n if (part.indexOf('[]') >= 0) {\r\n let id_ = /[:]\\d+/.exec(part);\r\n id_ = (id_ == null ? -1 : id_[0]);\r\n let clearPart = part.replace(/([:]\\d+)\\[\\]/g, '');\r\n if (target[clearPart] === undefined)\r\n target[clearPart] = [];\r\n if (!target[clearPart].some(o => {\r\n if (o.__id == id_) {\r\n target = o;\r\n return true;\r\n }\r\n })) {\r\n if (gentle) { target = null; return true; }\r\n target[clearPart].push((id_ < 0 ? {} : { __id: id_ }));\r\n target = target[clearPart][target[clearPart].length - 1];\r\n }\r\n } else {\r\n if (index == parts.length - 1) {\r\n target[part] = value;\r\n } else {\r\n if (target[part] === undefined) {\r\n if (gentle) { target = null; return true; }\r\n target[part] = {};\r\n }\r\n target = target[part];\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * \r\n * @param {string} name (where value saves: this.[].key\r\n * @param {*} params next keys:\r\n * required:\r\n * table - where to place our elements\r\n * appendButtonSelector - selector for button which will add new item of this dynamic field\r\n * removeSelector - selector (inside template) which deletes particular item\r\n * fields - object {: {selector, options($clone)}}\r\n * \r\n * optional: \r\n * removeFirstEvent() - make some additional acts during removing\r\n * keepOne - true when one element cannot be deleted(false by default)\r\n * keepTable - true when table should be shown, even when keepOne=false (false by default)\r\n * ignoreForEmpty - if true, block wil be ignored if all fields are empty\r\n * prepareTemplate($clone, blockPiece) should return {block: $clone, artifacts: obj(optional)\r\n * (this method can help you to prepare item before placing)\r\n * beforeRemoval($clone) - make some additional acts before removal\r\n * afterRemoval() - make some additional acts after removal\r\n * dontSubmitOnRemove - turning off submitForm in remove()\r\n */\r\n addDynamicField(name, params){\r\n let self = this;\r\n let parent = params.parent || $(document.body);\r\n let fetchRootElem = (selector) => typeof (selector) == \"string\" ? tools.findExternalOnly(parent, selector) : $(selector);\r\n let $table = fetchRootElem(params.table);\r\n let $dataExpandableDiv = $(`.expandablerow[data-expandablediv = '${$table.parent().attr(\"id\")}']`);\r\n let elements = [];\r\n\r\n \r\n function createClone(silent) {\r\n let $template = tools.findExternalOnly($table, \".template-list-row\");\r\n let $lastRow = tools.findExternalOnly($table, '.dynamic-list-row').last();\r\n let $clone = $($table[0].querySelector(\".template-list-row\").cloneNode(true));\r\n let _id = self.genUniqueId();\r\n\r\n let blockPiece = {\r\n index: (() => {\r\n const valid = elements.filter(e => !e.removed);\r\n return valid.length > 0 ? valid[valid.length - 1].index + 1 : 0;\r\n })(),\r\n fields: [],\r\n reset: function() {\r\n if (tools.findExternalOnly($table, '.dynamic-list-row').length > 1 || !params.keepOne) {\r\n if (params.beforeRemoval !== undefined) {\r\n params.beforeRemoval($clone);\r\n }\r\n $clone.remove();\r\n this.fields.map(field => field.delete());\r\n this.removed = true;\r\n if (params.afterRemoval !== undefined) {\r\n params.afterRemoval();\r\n }\r\n } else {\r\n this.index = 0;\r\n }\r\n },\r\n isFilled: function () {\r\n return this.fields.some(f => f.isFilled());\r\n },\r\n artifacts: [],\r\n getFieldsFlat: function () {\r\n let result = [];\r\n this.fields.forEach(f => {\r\n if (f.isDynamic) {\r\n f.getElements().forEach(e => {\r\n result = result.concat(e.getFieldsFlat());\r\n });\r\n } else {\r\n result.push(f);\r\n }\r\n });\r\n return result;\r\n },\r\n tree: {},\r\n removed: false,\r\n remove: function () {\r\n this.removed = true;\r\n let elementsCount = elements.filter(x => !x.removed).length\r\n if (elementsCount === 0) {\r\n if (!params.keepOne) {\r\n $clone.closest('div').hide();\r\n $clone.closest('.expandable-div').find('.expandablerow').addClass('expandablerow-collapsed');\r\n $clone.closest('.expandable-div').find(\".tab-expandablerow-add\").attr(\"tabindex\", \"0\");\r\n }else{\r\n this.removed = false;\r\n }\r\n if (params.removeFirstEvent !== undefined)\r\n params.removeFirstEvent();\r\n }\r\n this.reset();\r\n if (!params.dontSubmitOnRemove)\r\n self.submitForm(null, !self._submitOnChange);\r\n }\r\n }\r\n\r\n $clone.removeClass('template-list-row').addClass('dynamic-list-row');\r\n\r\n // auto fields\r\n self.fetchFields($clone).inputs.forEach(([el, item, options]) => {\r\n const fieldParams = { disabledSubmitting: true, parent: $clone, ...options };\r\n const field = self.addInputField(el, `${name}:${_id}[].${item}`, fieldParams);\r\n blockPiece.tree[item] = field;\r\n blockPiece.fields.push(field);\r\n });\r\n\r\n if (params.fields !== undefined) {\r\n for (let item in params.fields) {\r\n let value = params.fields[item];\r\n let fieldParams = {};\r\n if (typeof (value) === \"string\") {\r\n value = { selector: value };\r\n } else if (value.options !== undefined) {\r\n fieldParams = typeof (value.options) === \"function\" ? value.options($clone) : value.options;\r\n }\r\n fieldParams.disabledSubmitting = true;\r\n fieldParams.parent = $clone;\r\n\r\n const field = self.addInputField($clone.find(value.selector), `${name}:${_id}[].${item}`, fieldParams);\r\n blockPiece.tree[item] = field;\r\n blockPiece.fields.push(field);\r\n }\r\n }\r\n\r\n $clone.find(params.removeSelector).first().click((e) => {\r\n e.preventDefault();\r\n blockPiece.remove();\r\n $(e.target).blur();\r\n });\r\n\r\n let anchor = $lastRow.length === 1 ? $lastRow : $template;\r\n params.prepareTemplate = params.prepareTemplate || (c => { return { block: c }; });\r\n const { block, artifacts } = params.prepareTemplate($clone, blockPiece);\r\n anchor[0].insertAdjacentElement('afterEnd', block[0]);\r\n\r\n if (artifacts !== undefined) {\r\n for (let key in artifacts) {\r\n blockPiece.artifacts.push({\r\n path: `${name}:${_id}[].${key}`,\r\n value: artifacts[key],\r\n name: self.removePathId(`${name}:${_id}[].${key}`),\r\n });\r\n blockPiece.tree[key] = artifacts[key];\r\n }\r\n }\r\n\r\n elements.push(blockPiece);\r\n\r\n if (!silent) {\r\n self.submitForm(null, !self._submitOnChange);\r\n }\r\n\r\n blockPiece.fields.forEach(f => { f.params_.disabledSubmitting = false; });\r\n }\r\n\r\n if(params.keepOne)\r\n createClone(true);\r\n\r\n fetchRootElem(params.appendButtonSelector).click(() => createClone());\r\n\r\n // AG TODO: WILL NOT WORK WITH DYNAMIC-IN-DYNAMIC. NEED TO BE REFACTORED!\r\n $dataExpandableDiv.click(function () {\r\n var $this = $(this);\r\n if ($this.hasClass('expandablerow-collapsed')) {\r\n $this.removeClass('expandablerow-collapsed');\r\n\r\n var $expandableDiv = $('#' + $this.data('expandablediv'));\r\n $expandableDiv.show();\r\n\r\n $this.find(\".tab-expandablerow-add\").attr(\"tabindex\", \"-1\");\r\n\r\n if (tools.findExternalOnly($expandableDiv, '.dynamic-list-row').length === 0) {\r\n createClone();\r\n }\r\n }\r\n });\r\n\r\n let result = {\r\n isDynamic: true,\r\n reset: function () {\r\n elements.forEach((item) => item.reset());\r\n if (!params.keepOne) {\r\n if (!params.keepTable)\r\n $table.parent().hide();\r\n $dataExpandableDiv.addClass('expandablerow-collapsed');\r\n }\r\n if (params.removeFirstEvent !== undefined)\r\n params.removeFirstEvent();\r\n },\r\n params_: params,\r\n getElements: function () {\r\n return elements.filter(bp => !bp.removed);\r\n },\r\n delete: function () {\r\n elements.forEach((item) => item.fields.forEach(f => f.delete()));\r\n },\r\n isFilled: function () { return elements.some(e => e.isFilled()); },\r\n ignoredEmptyFields: function () {\r\n let result = [];\r\n if (params.ignoreForEmpty) {\r\n elements.forEach((e) => {\r\n if (!e.isFilled()) {\r\n result = result.concat(e.getFieldsFlat().map(f => f.varName));\r\n }\r\n });\r\n }\r\n return result;\r\n },\r\n setCount: function ({count, removeStrategy = \"simple\" }) {\r\n let currentCount = this.getElements().length;\r\n if (count !== currentCount) {\r\n if (count > currentCount) {\r\n while (this.getElements().length < count)\r\n createClone();\r\n } else {\r\n if (removeStrategy === \"simple\") {\r\n this.getElements().forEach((bp, i) => { if (i >= count) bp.remove(); });\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n this._dynamicFields.push(result);\r\n\r\n if (params.keepOne && !params.disabledSubmitting)\r\n self.submitForm(null, !self._submitOnChange);\r\n\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * Adds group of fields to calculator.\r\n * @param {any} nameOrNames to fetch all fields you need\r\n * @param {any} checker function f(fields, options) which returns object {valid: bool, artifacts: obj}\r\n * @param {any} options is additional parameters for group\r\n */\r\n addGroup(nameOrNames, checker, options) {\r\n let self = this;\r\n\r\n this.fieldGroups.push({\r\n getFields: function () {\r\n let resList = [];\r\n function checkField(f, name) {\r\n return !f.ignore && !f.__tmpIgnore && self.isPathInside(f.name, name);\r\n }\r\n if (typeof (nameOrNames) === 'string') {\r\n nameOrNames = [nameOrNames];\r\n }\r\n\r\n nameOrNames.forEach(function (name) {\r\n resList = resList.concat(self.inputFields.filter(f => checkField(f, name)));\r\n });\r\n\r\n resList.tree = {};\r\n resList.forEach((f) => { self.writePath(resList.tree, f.varName, f); });\r\n\r\n self._dynamicFields.forEach(df => {\r\n df.getElements().forEach(e => {\r\n e.artifacts.filter(a => nameOrNames.some(name => self.isPathInside(a.name, name))).forEach(a => {\r\n self.writePath(resList.tree, a.path, a.value);\r\n });\r\n });\r\n });\r\n\r\n return resList;\r\n },\r\n check: function (sender, autoValidation) {\r\n let fields = this.getFields();\r\n let newOptions = { sender: sender, autoValidation: autoValidation };\r\n for (let key in options) {\r\n newOptions[key] = options[key];\r\n }\r\n return checker(fields, newOptions);\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Parses all input fields and initialises connected variables\r\n * */\r\n parse(sender, autoValidation) {\r\n var self = this;\r\n const newValues = this.irregularValueNames.reduce((acc, v) => { acc[v] = self[v]; return acc; }, {});\r\n this.log(\"Irregular value obj:\", newValues);\r\n this.inputFields.forEach(function (field) {\r\n field.__tmpIgnore = false;\r\n self.clearPath(self, field.name);\r\n self.clearPath(self._exportObject.parse, field.name);\r\n });\r\n\r\n let ignoreList = this._dynamicFields.reduce((accum, v) => accum.concat(v.ignoredEmptyFields()), []);\r\n this.inputFields = this.inputFields.filter(function (f) { return !f.deleted; });\r\n\r\n var result = {\r\n valid: true,\r\n filled: this.defaultFilled,\r\n enableResetButton: false,\r\n hasValueChanges: false\r\n };\r\n\r\n let fieldsToParse = this.inputFields.filter(function (f) {\r\n let ignoreCouseEmpty = ignoreList.indexOf(f.varName) >= 0;\r\n if (f.showReset()) {\r\n result.enableResetButton = true;\r\n }\r\n if (f.ignore)\r\n f.reset({ keepValue: !self.resetValuesOnIgnore });\r\n else if (ignoreCouseEmpty) {\r\n f.__tmpIgnore = true;\r\n f.reset({ keepValue: true });\r\n }\r\n return !f.ignore && !ignoreCouseEmpty;\r\n });\r\n\r\n const unsilence = [];\r\n if (sender) {\r\n const senderField = fieldsToParse.find(f => sender == f.elem[0]);\r\n if (senderField && senderField.params_.unsilence)\r\n unsilence.push(...senderField.params_.unsilence);\r\n }\r\n \r\n // first phase\r\n fieldsToParse.forEach(function (field) {\r\n var res = field.check(autoValidation, sender, 1, unsilence.indexOf(field.name) >= 0);\r\n field.valid = res;\r\n\r\n if (field.isFilled()) {\r\n result.filled = true;\r\n }\r\n if (field.errorIsVisible()) {\r\n result.enableResetButton = true;\r\n }\r\n\r\n if (!res)\r\n result.valid = false;\r\n else if (field.name !== undefined) {\r\n self.writePath([self, newValues], field.varName, field.getValue());\r\n self.writePath(self._exportObject.parse, field.varName, field.getExportValue());\r\n }\r\n });\r\n\r\n // dynamicField artifacts\r\n this._dynamicFields.forEach(df => {\r\n df.getElements().forEach(e => {\r\n e.artifacts.forEach(a => {self.writePath([self, newValues], a.path, a.value, true);});\r\n });\r\n });\r\n\r\n this.afterFirstPhaseCheck();\r\n\r\n // second phase\r\n fieldsToParse.forEach(function (field) {\r\n var res = field.check(autoValidation, sender, 2);\r\n if (!res)\r\n result.valid = field.valid = false;\r\n });\r\n if (!autoValidation) {\r\n const newValuesString = JSON.stringify(newValues);\r\n result.hasValueChanges = this.lastValuesString !== newValuesString;\r\n this.lastValuesString = newValuesString;\r\n }\r\n\r\n this.fieldGroups.forEach(group => {\r\n let res = this.processGroup(group, sender, autoValidation);\r\n if (!res)\r\n result.valid = false;\r\n });\r\n\r\n this.log(\"PARSE: \", this);\r\n result.enableResetButton = result.enableResetButton || result.filled;\r\n this.afterParse(sender, autoValidation);\r\n this.forceRender();\r\n return result;\r\n }\r\n\r\n\r\n\r\n submitForm(sender, autoValidation, skipValueChangesCheck = false) {\r\n if(!this.isActive) return;\r\n this._exportObject = {\r\n parse: {},\r\n render: {notes: []}\r\n };\r\n \r\n if (this.beforeSubmit() === false) {\r\n return;\r\n }\r\n\r\n let parsing = this.parse(sender, autoValidation);\r\n this.resetButtons.forEach(function (elem) {\r\n (parsing.enableResetButton ? elem.show() : elem.hide());\r\n });\r\n\r\n if (parsing.filled && !this._statistic.startedSent) {\r\n this.sendStatisticMessage('Is_Started');\r\n this._statistic.startedSent = true;\r\n }\r\n\r\n if (!this.isReady()) {\r\n return; // AG TODO: Maybe wait for ready? Design how to do it.\r\n }\r\n\r\n this.log(\"BEFORE CALC: valid=\", parsing.valid);\r\n \r\n if (!this.calculateForValidOnly || parsing.valid) {\r\n this.toggleCustomClasses();\r\n let calcValid = this.calculate({ sender: sender, autoValidation: autoValidation });\r\n this.log('AFTER CALCULATE: ', this);\r\n if (!autoValidation && (skipValueChangesCheck || parsing.hasValueChanges)) {\r\n if (parsing.valid && calcValid) {\r\n this.beforeRender();\r\n this.render();\r\n this._exportObjectFinal = tools.deepcopy(this.generateExportObject());\r\n this.showResults();\r\n } else {\r\n this.hideResults();\r\n }\r\n }\r\n }\r\n\r\n if (!parsing.valid && !autoValidation) {\r\n this.renderError();\r\n }\r\n\r\n this.log(\"EXPORT OBJECT:\", this._exportObject);\r\n this.afterSubmit();\r\n }\r\n \r\n}\r\n","import { ShowErrorWay } from \"./utils.js\";\r\n\r\nexport class CalculatorInterface {\r\n constructor() {\r\n this.debug = false;\r\n this._fieldTypes = [];\r\n this.inputFields = [];\r\n this.outputFields = [];\r\n this.forceOutputs = [];\r\n this.fieldGroups = [];\r\n this.showErrorWay = ShowErrorWay.SHOW_ALL;\r\n this.resetButtons = [];\r\n this._exportObject = {};\r\n this._exportObjectFinal = {};\r\n this.calculateForValidOnly = true;\r\n this.resetValuesOnIgnore = false;\r\n this._submitOnChange = false;\r\n this.isActive = true;\r\n this._dynamicFields = [];\r\n this._inputFieldsTree = {fields: []};\r\n this.view = \"\";\r\n this.irregularValueNames = [];\r\n this.lastValuesString = \"\";\r\n }\r\n\r\n code() { return \"three_letter_code_of_calculator\"; } // reimplement it in inherited classes\r\n type() { return \"code_for_export\"; } // reimplement it in inherited classes\r\n\r\n autoKey() { return '0'; } // used for calculator with tabs (every tab - one mini calculator)\r\n initialize() { } // use this instead of redefining constructor\r\n calculate(params) { } // calculation method (all calculations of calculator should be here)\r\n beforeSubmit() { } // before parsing\r\n afterSubmit() { } // at the end of submit\r\n afterParse(sender, autoValidation) { }\r\n beforeRender() { }\r\n onReset() { }\r\n afterFirstPhaseCheck() { }\r\n isReady() { return true; }\r\n log(...args) {}\r\n setupHandlers() {}\r\n setHash(hash){}\r\n checkHash(hash) {}\r\n getHash() {}\r\n\r\n autoSubmit(sender, skipValueChangesCheck) {\r\n sender = sender || null;\r\n this.submitForm(sender, false, skipValueChangesCheck);\r\n }\r\n fetchFields(htmlNode) {}\r\n\r\n autoAddFields() {} // adds fields from special html attributes\r\n loadDescription(feedbackBottom = true) {} // just loads description from file\r\n patchFieldTypes(newFieldTypes) {} // updates field-type library\r\n\r\n showResults() {$('.calc-div-results').addClass('show-results');} // shows result\r\n hideResults() {} // hides result\r\n\r\n generateExportObject() { return this._exportObject; }\r\n get defaultFilled(){ return false; }\r\n setupStatistic(params) {} // setups statistic module\r\n sendStatisticMessage(string_or_object) {} // sends statistic message to YM\r\n submitOnClick(selectorOrElem) {} // turn on submitting on elem click\r\n submitOnChange() {} // make submit on change\r\n\r\n addResetButton(selector, hideOnDefault) {}\r\n\r\n genUniqueId() { return Math.random() * 1e7 | 0; }\r\n\r\n writePath(obj, path, value, gentle=false) {} // method for writing propery into this object using path (used to generate input values for calculation stage)\r\n removePathId(path) {} // remove path\r\n clearPath(obj, path) {} // clears path\r\n isPathInside(path, srcPath) {} // checks if path inside\r\n \r\n addInputField(selector, name, params) {}\r\n addDynamicField(name, params){}\r\n addGroup(nameOrNames, checker, options) {}\r\n \r\n processGroup(group, sender, autoValidation) { } // Parses group with internal checks (between elements inside group)\r\n\r\n parse(sender, autoValidation) { } // Parses all input fields and initialises connected variables\r\n resetInputFields(params) {}\r\n \r\n addOutputField(selector, name, params, forced = false) {}\r\n\r\n render() {}\r\n\r\n forceRender() {}\r\n\r\n toggleCustomClasses() {}\r\n\r\n renderError() {}\r\n\r\n /**\r\n * Submits form\r\n * - calls beforeSubmit (if it returns false, stops)\r\n * - parse\r\n * - toggling reset buttons\r\n * - Is_Started stat send\r\n * - calls isReady (if false, breaks, but almost always should be true)\r\n * - if parse result is valid:\r\n * - toggle custom classes\r\n * - call calculate\r\n * - if calculation is not valid, hides result part, otherwise \r\n * call beforeRender, then render, then generateExportObject, then shows results\r\n * - renders error for invalid parsing result\r\n * - calls afterSubmit\r\n */\r\n submitForm(sender, autoValidation, skipValueChangesCheck = false) {} \r\n autoValidate(sender) {} \r\n}","class BaseOutputField {\r\n constructor(calculator, selector, name, params) {\r\n this.calculator = calculator;\r\n this.container = $(selector);\r\n this.name = name;\r\n this.params = params;\r\n this.setup();\r\n }\r\n\r\n setup() {}\r\n\r\n get(paramName, defaultValue) {\r\n if (this.params !== undefined && this.params[paramName] !== undefined)\r\n return this.params[paramName];\r\n return defaultValue;\r\n }\r\n\r\n get renderMethod() {\r\n if (this.get('html') !== undefined) {\r\n return 'html';\r\n }\r\n return 'text';\r\n }\r\n\r\n get type() {\r\n return this.get('type', 'text');\r\n }\r\n\r\n get value() {\r\n return this.calculator[this.name];\r\n }\r\n\r\n compose() {\r\n const val = this.value;\r\n if (this.params === undefined && val !== undefined) {\r\n if (val.hasOwnProperty('text'))\r\n return val.text;\r\n return val;\r\n }\r\n }\r\n\r\n compose_() {\r\n const renderFunc = this.get('render');\r\n if (renderFunc === undefined) {\r\n return this.compose();\r\n }\r\n return renderFunc(this.value);\r\n }\r\n\r\n render() {\r\n this.container[this.renderMethod](this.compose_());\r\n }\r\n\r\n renderExport(exportObject) {\r\n exportObject[this.name + '_' + this.type] = this.compose_();\r\n }\r\n}\r\n\r\nclass RenderRequiredOutputField extends BaseOutputField {\r\n setup() {\r\n const renderFunc = this.get('render');\r\n if (renderFunc == undefined) {\r\n console.error(`You must write render method for [${this.type}] type of output field.`);\r\n }\r\n this.renderFunc = renderFunc;\r\n }\r\n\r\n compose() {\r\n return this.renderFunc(this.value);\r\n }\r\n}\r\n\r\nclass HtmlOutputField extends BaseOutputField {\r\n get renderMethod() { return 'html'; }\r\n}\r\n\r\nclass TextField extends HtmlOutputField {\r\n compose() { return this.value; }\r\n}\r\n\r\nclass LocaleNumOutputField extends BaseOutputField {\r\n compose() {\r\n const options = {\r\n minPrecision: this.get('minPrecision'),\r\n maxPrecision: this.get('maxPrecision')\r\n };\r\n return tools.getLocaleNumber(this.value, options);\r\n }\r\n}\r\n\r\nclass LocaleSumOutputField extends BaseOutputField {\r\n compose() { return tools.getLocaleSum(this.value); }\r\n}\r\n\r\nclass MoneyRubleOutputField extends HtmlOutputField {\r\n compose() { return tools.getLocaleSumInRubbles(this.value); }\r\n}\r\n\r\nclass MoneyTextOutputField extends BaseOutputField {\r\n compose() { return tools.verboseNumber(this.value); }\r\n}\r\n\r\nclass MoneyRoundedRubleField extends HtmlOutputField {\r\n compose() { return tools.getRoundedNumberInRubbles(this.value); }\r\n}\r\n\r\nclass MoneyRoundedRubleOutputField extends HtmlOutputField {\r\n compose() { return tools.getRoundedNumberInRubbles(this.value); }\r\n}\r\n\r\nclass PeriodOutputField extends BaseOutputField {\r\n compose() {\r\n const from_ = this.value.dateFrom.toLocaleFormat();\r\n const to_ = this.value.dateTo.toLocaleFormat();\r\n switch (this.get('kind', 'with-duration')) {\r\n case 'with-duration':\r\n return `с ${from_} по ${to_} (${this.value.duration.inDays} дн.)`;\r\n case 'with-full-duration':\r\n return `с ${from_} по ${to_} (${tools.verboseCountingValue(this.value.duration.inDays, [['день', 'дня', 'дней']])})`;\r\n }\r\n }\r\n}\r\n\r\nclass DateOutputField extends BaseOutputField {\r\n compose() { return this.value.toLocaleFormat(); }\r\n}\r\n\r\nclass DayOutputField extends BaseOutputField {\r\n compose() { \r\n return tools.verboseCountingValue(this.value, [[\"день\", \"дня\", \"дней\"]]);}\r\n}\r\n\r\nclass PercentOutputField extends HtmlOutputField {\r\n compose() {\r\n const options = {\r\n minPrecision: this.get('minPrecision'),\r\n maxPrecision: this.get('maxPrecision')\r\n };\r\n\r\n return tools.getLocaleNumber(this.value, options) + \"%\";\r\n }\r\n}\r\n\r\nclass NoteOutputField extends RenderRequiredOutputField {\r\n render() {\r\n const result = this.compose_();\r\n this.container.removeClass('active only-print');\r\n if (result === 'print' || result === true) {\r\n this.container.addClass('active');\r\n if (result === 'print') {\r\n this.container.addClass('only-print');\r\n }\r\n }\r\n }\r\n\r\n renderExport(exportObject) {\r\n const result = this.compose_();\r\n if (result === 'print' || result === true) {\r\n exportObject.notes.push(tools.convertElemToTextWithLinksForExport(this.container));\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * works with only direct children elements\r\n * Takes optional params: \r\n * - parseLink : true if convertElemToTextWithLinksForExport is needed\r\n * - selector : selector for additional logic\r\n */\r\nclass ExportVisibleOutputField extends BaseOutputField {\r\n renderExport(exportObject) {\r\n const selector = this.get('selector', '> *');\r\n const htmlObject = this.container.find(`${selector}:visible`).toArray().filter(x=>$(x).text())[0];\r\n\r\n exportObject[this.name] = this.get(\"parseLink\") && htmlObject \r\n ? tools.convertElemToTextWithLinksForExport(htmlObject) \r\n : $(htmlObject).text();\r\n }\r\n}\r\n\r\n/**\r\n * Takes optional params: \r\n * - duration : object with slideUp and slideDown time or true to use default time\r\n */\r\nclass ToggleOutputField extends RenderRequiredOutputField {\r\n render() {\r\n const slideUpTime = this.get('duration', {slideUp : undefined}).slideUp;\r\n const slideDownTime = this.get('duration', {slideDown : undefined}).slideDown;\r\n\r\n const show = () => this.get('duration') ? this.container.slideDown(slideUpTime || 400) : this.container.show();\r\n const hide = () => this.get('duration') ? this.container.slideUp(slideDownTime || 400) : this.container.hide();\r\n\r\n if (this.compose_())\r\n show();\r\n else\r\n hide();\r\n }\r\n}\r\n\r\nclass ConditionalBlockOutputField extends RenderRequiredOutputField {\r\n setup() {\r\n super.setup();\r\n const alternativeBlockSelector = this.get('alternativeBlock', '');\r\n if (alternativeBlockSelector === '') {\r\n console.warn(\"It's bad way to use `conditionalBlock` with empty alternativeBlock param. Try to use `toggle` instead.\")\r\n }\r\n this.alternativeBlock = $(alternativeBlockSelector);\r\n }\r\n\r\n render() {\r\n if (this.compose_()) {\r\n this.container.show();\r\n this.alternativeBlock.hide();\r\n }\r\n else {\r\n this.container.hide();\r\n this.alternativeBlock.show();\r\n }\r\n }\r\n}\r\n\r\nclass ShareOutputField extends HtmlOutputField {\r\n compose() {\r\n return this.value.text.replace('%', ' %');\r\n }\r\n}\r\n\r\nclass MoneyLocalRoundedOutField extends HtmlOutputField {\r\n compose() {\r\n return tools.getLocaleSumInRubbles(tools.getRoundedNumber(this.value))\r\n }\r\n}\r\n\r\nfunction createOutputField(calculator, selector, name, params) {\r\n let params_ = params || {};\r\n let class_ = undefined;\r\n switch (params_.type) {\r\n case 'localeNumber': class_ = LocaleNumOutputField; break;\r\n case 'localeSum': class_ = LocaleSumOutputField; break;\r\n case 'moneyRuble': class_ = MoneyRubleOutputField; break;\r\n case 'moneyRoundedRuble': class_ = MoneyRoundedRubleOutputField; break;\r\n case 'moneyText': class_ = MoneyTextOutputField; break;\r\n case 'moneyRoundedRuble': class_ = MoneyRoundedRubleField; break;\r\n case 'moneyLocalRoundedRuble': class_ = MoneyLocalRoundedOutField; break\r\n case 'period': class_ = PeriodOutputField; break;\r\n case 'date': class_ = DateOutputField; break;\r\n case 'percent': class_ = PercentOutputField; break;\r\n case 'note': class_ = NoteOutputField; break;\r\n case 'toggle': class_ = ToggleOutputField; break;\r\n case 'conditionalBlock': class_ = ConditionalBlockOutputField; break;\r\n case 'day': class_ = DayOutputField; break;\r\n case 'share': class_ = ShareOutputField; break;\r\n case 'text': class_ = TextField; break;\r\n case 'exportVisible' : class_ = ExportVisibleOutputField; break\r\n default: class_ = BaseOutputField; break;\r\n }\r\n\r\n return new class_(calculator, selector, name, params);\r\n}\r\n\r\nexport { createOutputField };","import {fields as basicFields} from \"../basic_fields.js\";\r\nimport {CalculatorComplex} from \"./calc_complex.js\";\r\nimport {createOutputField} from \"./output_fields.js\";\r\nexport {ShowErrorWay} from \"./utils.js\";\r\n\r\n\r\n/**\r\n * TODO: Move inline-radio to web-component\r\n * TODO: Move datetime-segment elem to web-component\r\n * \r\n * */\r\nexport class Calculator extends CalculatorComplex {\r\n\r\n constructor() {\r\n super();\r\n this._fieldTypes = basicFields;\r\n this.showVersionBanner = ShowVersionBanner;\r\n this.setupVersionBanner();\r\n this.setupHandlers();\r\n this.autoAddFields();\r\n this.initialize();\r\n this.forceRender();\r\n }\r\n \r\n log(...args) {\r\n if (this.debug) {\r\n console.log(...args);\r\n }\r\n }\r\n\r\n setupVersionBanner() {\r\n if(this.showVersionBanner){\r\n $('.old-version-alert')?.show();\r\n $('.old-version-alert')?.find('.close-button')?.click(function () {\r\n $('.old-version-alert').slideUp(200);\r\n });\r\n\r\n $('.new-version-alert')?.show();\r\n $('.new-version-alert')?.find('.close-button')?.click(function () {\r\n $('.new-version-alert').slideUp(200);\r\n });\r\n }\r\n }\r\n\r\n setupHandlers() {\r\n const self = this;\r\n $(\"#printResult\").click(function () {\r\n if (self.isActive){\r\n window.print();\r\n const message = self._statistic.printMessage;\r\n self.sendStatisticMessage(typeof(message) === \"function\" ? message() : message);\r\n }\r\n return false;\r\n });\r\n\r\n $(\"#wordResult\").click(function () {\r\n if (self.isActive) {\r\n const formData = new FormData();\r\n formData.append(\"calcType\", self.type());\r\n formData.append(\"json\", JSON.stringify(self._exportObjectFinal));\r\n\r\n $.ajax({\r\n url: ExportWordHost,\r\n type: \"POST\",\r\n data: formData,\r\n processData: false,\r\n contentType: false,\r\n cache: false,\r\n xhr:function(){\r\n var xhr = new XMLHttpRequest();\r\n xhr.onloadstart = function(ev) {\r\n xhr.responseType = \"blob\";\r\n };\r\n return xhr;\r\n },\r\n success: function(response, textStatus, jQxhr) {\r\n const name = decodeURI(jQxhr.getResponseHeader(\"Content-Disposition\").split(\"filename*=UTF-8''\")[1]);\r\n const blob = new Blob([response], {type:\"application/ms-word\"});\r\n if (window.navigator.msSaveOrOpenBlob) {\r\n navigator.msSaveOrOpenBlob(blob, name);\r\n } else {\r\n const link = document.createElement(\"a\");\r\n link.download = name;\r\n link.href = URL.createObjectURL(blob);\r\n link.click(); \r\n }\r\n return true;\r\n }, \r\n });\r\n\r\n const message = self._statistic.exportMessage;\r\n self.sendStatisticMessage(typeof(message) === \"function\" ? message() : message);\r\n }\r\n return false;\r\n });\r\n\r\n }\r\n /**\r\n * \r\n * @param {string} hash - place where need to redirect\r\n */\r\n setHash(hash){\r\n if (hash)\r\n window.location.hash = hash;\r\n else\r\n window.history.pushState(\"\", document.title, window.location.pathname);\r\n }\r\n\r\n checkHash(hash) {\r\n const currentHash = this.getHash();\r\n return currentHash.match(new RegExp(`^${hash}$`));\r\n }\r\n\r\n getHash() {\r\n return document.location.hash.substring(1);\r\n }\r\n\r\n autoSubmit(sender, skipValueChangesCheck) {\r\n sender = sender || null;\r\n this.submitForm(sender, false, skipValueChangesCheck);\r\n }\r\n \r\n autoAddFields() {\r\n const fields = this.fetchFields();\r\n fields.inputs.forEach(args => { if (args !== null) this.addInputField(...args); });\r\n fields.outputs.forEach(args => { if (args !== null) this.addOutputField(...args); });\r\n }\r\n\r\n loadDescription(feedbackBottom = true) {\r\n const self = this;\r\n return new Promise(function (resolve, reject) {\r\n $(\"#calcDescription\").load(\"/conf/calc_\"+self.code()+\"/promo.html?v=\" + DataVersionSalt, function () {\r\n $(\".smart-link\").each(function () {\r\n tools.initSmartLink(this);\r\n });\r\n\r\n tools.setWarningMessage(this);\r\n\r\n if (!IsAuthEnabled) {\r\n const mailSubject = `Обратная связь`;\r\n if (feedbackBottom) {\r\n $(\".calc-div-input-footer\").append($(mailSubject));\r\n }\r\n else {\r\n $(\"#calcDescription\").prepend($(`
${mailSubject}
`));\r\n }\r\n }\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n patchFieldTypes(newFieldTypes) {\r\n this._fieldTypes = this._fieldTypes.concat(newFieldTypes);\r\n }\r\n\r\n showResults() {\r\n $(\".calc-div-results\").addClass(\"show-results\");\r\n }\r\n\r\n hideResults() {\r\n $(\".calc-div-results\").removeClass(\"show-results\");\r\n }\r\n\r\n generateExportObject() {\r\n return this._exportObject;\r\n }\r\n\r\n get defaultFilled(){\r\n return false;\r\n }\r\n\r\n /**\r\n * Sets up part which works with statistic\r\n * @param {object} params\r\n * - calcName (required) uses in message gen\r\n * - prefix ('Calculation_' by default) uses in message gen\r\n * - printMessage ('Print' by default) you can use object here (@see {sendStattisticMessage}) or even function which returns string_or_object\r\n * - exportMessage ('Export' by default) the same as previous but for export\r\n */\r\n setupStatistic(params) {\r\n params = params || {};\r\n this._statistic = params;\r\n this._statistic.startedSent = params.isStartedEventIgnore || false;\r\n if (this._statistic.prefix === undefined)\r\n this._statistic.prefix = \"Calculation_\";\r\n\r\n if (this._statistic.printMessage === undefined)\r\n this._statistic.printMessage = \"Print\";\r\n\r\n if (this._statistic.exportMessage === undefined)\r\n this._statistic.exportMessage = \"Export\";\r\n }\r\n\r\n /**\r\n * Sends statistic message\r\n * @param {any} string_or_object\r\n * If this value is object it could contain next props:\r\n * - message (required)\r\n * - args, if you need to send additional arguments\r\n * - prefix, if you need to redefine prefix for specific stat message\r\n * Otherwise it uses like an object with only `message` prop filled\r\n */\r\n sendStatisticMessage(string_or_object) {\r\n let params = string_or_object;\r\n if (typeof (string_or_object) === \"string\") { \r\n params = {\r\n message: string_or_object\r\n };\r\n }\r\n const prefix = params.prefix !== undefined ? params.prefix : this._statistic.prefix;\r\n\r\n if (this._statistic.calcName === undefined) {\r\n console.warn(\"Calculator's name is not set up. Use method `setupStatistic` for it.\");\r\n }\r\n\r\n ym(ymId, ymReachGoal, prefix + params.message + \"_\" + this._statistic.calcName, params.args);\r\n }\r\n\r\n submitOnClick(selectorOrElem) {\r\n var self = this;\r\n $(selectorOrElem).click(function () { self.submitForm(null, false, true); });\r\n }\r\n\r\n submitOnChange() {\r\n this._submitOnChange = true;\r\n }\r\n\r\n addResetButton(selector, hideOnDefault) {\r\n hideOnDefault = hideOnDefault === undefined ? true : hideOnDefault;\r\n var self = this;\r\n var elem = $(selector);\r\n elem.click(function () {\r\n if (self.isActive){\r\n self.resetInputFields();\r\n self.sendStatisticMessage(\"Default\");\r\n }\r\n });\r\n if (hideOnDefault) {\r\n this.resetButtons.push(elem);\r\n }\r\n }\r\n\r\n removePathId(path) {\r\n return path.replace(/[:]\\d+/g, \"\");\r\n }\r\n\r\n clearPath(obj, path) {\r\n const parts = path.split(\".\");\r\n const part0 = parts[0];\r\n obj[part0.replace(/\\[|\\]/g, \"\")] = undefined;\r\n }\r\n\r\n /**\r\n * Checks that path inside srcPath\r\n * @param {object} obj\r\n * @param {string} path\r\n * @param {string} srcPath\r\n */\r\n isPathInside(path, srcPath) {\r\n return (path.indexOf(srcPath + \".\") == 0 || path.indexOf(srcPath + \"[]\") == 0 || path === srcPath);\r\n }\r\n\r\n /**\r\n * Method for adding input fields (instead of parsing form)\r\n * @param {stringOrElement} selector\r\n * @param {string} name (where value saves: this.)\r\n * @param {Object} params has next keys:\r\n * - type - one of (money, int). Some can be detected automatically ()\r\n * - defaultValue - (for reseting)\r\n * - errClassElem - (optional, set it if it's requires to add err class not to $(selector) elem but to different)\r\n * - showErrorWay - (optional - redefines global setting)\r\n * - disableAutoCheck - (optional - otherwise will check on change)\r\n * - errors - list of objects {check: func(v), selector: strOrElem, errClassElem: strOrElem[optional]}\r\n * - options - for some fieldTypes this options is useful\r\n * - preInit - (optional, will be called before init call)\r\n * - unsilence - (optional - array of other field names that would have non-silent check when this field is a sender)\r\n */\r\n addInputField(selector, name, params) {\r\n params = params || {};\r\n const self = this;\r\n\r\n if (params.dynamic) {\r\n params.table = selector;\r\n return this.addDynamicField(name, params);\r\n }\r\n\r\n const elem = $(selector);\r\n const ftype = params.type === undefined ? this._detectFieldType(elem) : params.type;\r\n const field = this._makeFieldObject(elem, ftype, params.options);\r\n params.showErrorWay = params.showErrorWay || self.showErrorWay;\r\n field.params_ = params;\r\n field.varName = name;\r\n field.name = self.removePathId(name);\r\n field.defaultValue = (params.defaultValue === undefined ? field.getClearValue() : params.defaultValue);\r\n\r\n if (!params.disableAutoCheck) {\r\n field.onChange(function (sender) {\r\n if (!params.disabledSubmitting) {\r\n self.submitForm(sender, !self._submitOnChange);\r\n }\r\n });\r\n }\r\n\r\n if (params.preInit !== undefined)\r\n params.preInit(field);\r\n\r\n field.init();\r\n\r\n this.inputFields.push(field);\r\n return field;\r\n }\r\n\r\n _detectFieldType(elem) {\r\n var result = undefined;\r\n this._fieldTypes.some(function (ft) {\r\n if (ft.detect(elem)) {\r\n result = ft.keyName();\r\n return true;\r\n }\r\n });\r\n if (result === undefined) {\r\n console.error(\"Can't detect field type\", elem);\r\n }\r\n return result;\r\n }\r\n\r\n _makeFieldObject(elem, fieldType, options) {\r\n var result = undefined;\r\n if (!this._fieldTypes.some(function (ft) {\r\n if (ft.keyName() === fieldType) {\r\n result = new ft(elem, options);\r\n return true;\r\n }\r\n })) {\r\n console.error(\"Can't find class for field type\", fieldType, \"of element\", elem);\r\n }\r\n return result;\r\n }\r\n \r\n /**\r\n * Parses group with internal checks (between elements inside group)\r\n * @param {any} group\r\n */\r\n processGroup(group, sender, autoValidation) {\r\n const result = group.check(sender, autoValidation);\r\n if (result.artifacts !== undefined) {\r\n for (const key in result.artifacts) {\r\n this[key] = result.artifacts[key];\r\n }\r\n }\r\n return result.valid; \r\n }\r\n \r\n resetInputFields(params) {\r\n const self = this;\r\n if (!this.isActive) return;\r\n params = params || {};\r\n this.inputFields.forEach(function (f) {\r\n if (params.fields === undefined || params.fields.some(f => self.isPathInside(f.name, f)))\r\n f.reset(params);\r\n });\r\n this.lastValuesString = \"\";\r\n\r\n this._dynamicFields.map((item) => item.reset());\r\n this.onReset();\r\n this.forceRender();\r\n\r\n this.resetButtons.forEach(function (elem) {\r\n elem.hide();\r\n });\r\n }\r\n\r\n /**\r\n * Method for rendering from variables (instead of render function)\r\n * @param {any} selector\r\n * @param {any} name\r\n * @param {any} params\r\n * @param {any} forced\r\n */\r\n addOutputField(selector, name, params, forced = false) {\r\n const field = createOutputField(this, selector, name, params);\r\n this.outputFields.push(field);\r\n if (forced)\r\n this.forceOutputs.push(field);\r\n return field;\r\n }\r\n\r\n render() {\r\n const self = this;\r\n const orderedFields = this.outputFields.map(x => x);\r\n const priorities = orderedFields.map(f => f.get(\"priority\", 0));\r\n if (priorities.length > 0 && priorities.some(x => x != priorities[0]))\r\n orderedFields.sort((a, b) => a.get(\"priority\", 0) - b.get(\"priority\", 0));\r\n orderedFields.forEach(function (field) {\r\n field.render(self);\r\n field.renderExport(self._exportObject.render);\r\n });\r\n }\r\n\r\n forceRender() {\r\n this.forceOutputs.forEach((field) => {\r\n field.render(this);\r\n });\r\n }\r\n\r\n toggleCustomClasses() {\r\n this.toggleClasses.map(customClass => {\r\n customClass.toggle();\r\n });\r\n }\r\n\r\n renderError() {\r\n if (!this._submitOnChange) {\r\n $(\".calc-div-results\").removeClass(\"show-results\");\r\n }\r\n }\r\n \r\n autoValidate(sender) {\r\n sender = sender || null;\r\n this.submitForm(sender, true);\r\n }\r\n \r\n}"],"sourceRoot":""}