import { Directive, Input, Output, EventEmitter, Inject, ElementRef, OnInit, AfterViewInit } from '@angular/core';
import {Observable } from 'rxjs';
@Directive({
selector: '[showwidth]',
//host: {
// "(input)": "ModelChange.next(this.objectModel)"
//}
})
export class DyWidthField implements AfterViewInit {
@Input() objectModel: any; // stored value
@Input() modelWidthFieldName: any;
@Input() modelQuantityFieldName: any;
@Input() trackWidth: boolean;
@Input() UOMName:string
private control: JQuery;
constructor(@Inject(ElementRef) elementRef: ElementRef) {
//console.log("elementref");
// console.log(elementRef);
this.control = $(elementRef.nativeElement);
}
public options = {
error: false, // Элемент отображаемый при ошибке
comment: false, // Элемент отображаемы при редактировании
calculatewrapper: false, // Элемент будет отображен при расчетах
calculate: false, // Элемент куда будет выводится результат вычисления
oncalculate: false, // Функция вызывается если введены [+,-,*,/,(,)]
onendcalculate: false, // Функция вызывается если удалены все [+,-,*,/,(,)]
onready: false, // Функция вызывается при подготовке элемента
onfocus: false, // Функция вызывается при установке фокуса
onblur: false, // Функция вызывается при потере фокуса (в функцию передается конечный результаты ввода)
onerror: false, // Функция вызывается при попытке ввода запрещенных символов
onenter: false, // Функция вызывается если нажата клавиша enter (вызывается ДО onblur)
onescape: false, // Функция вызывается если нажата клавиша escape (вызывается ДО onblur)
oninput: false, // Функция вызывается при вводе любого символа (в функцию передается введенный символ)
ifnul: '0', // Символ вставляемый если введеные данные ошибочны или 0
sign: true, // Показывать знак минус при вводе отрицательного значения
fixed: 2
};
public costToString = (cost: any, fixed) => {
var triadSeparator = ',';
var decSeparator = '.';
var minus = '−';
var num = '0';
var numd = '';
var fractNum = 2;
fixed = (!fixed) ? fixed = 2 : fixed;
if (this.options.fixed != undefined) {
fixed = this.options.fixed;
}
var fixedTest = '00';
if (fixed != 2) {
fixedTest = '';
for (var i = 0; i < fixed; i++) {
fixedTest += String('0');
}
}
if (!isNaN(parseFloat(cost))) {
num = parseFloat(Math.abs(cost).toString()).toFixed(fixed).toString();
numd = num.substr(num.indexOf('.') + 1, fixed).toString();
num = parseInt(num).toString();
var regEx = /(\d+)(\d{3})/;
while (regEx.test(num)) {
num = num.replace(regEx, "$1" + triadSeparator + "$2");
}
if (numd != fixedTest) {
var lastZeros = /[0]*$/g;
num += decSeparator + numd.replace(lastZeros, '');
}
if (cost < 0) num = '−' + num;
}
return num;
}
ngAfterViewInit() {
var component = this;
var nchars = new RegExp(/[\!\@\#\№\$\%\^\&\=\[\]\\\'\;\{\}\|\"\:\<\>\?~\`\_A-ZА-Яa-zа-я]/);
var achars = "1234567890+-/*,. ";
var errTimer = undefined;
var inObj = this.control.find("input");
inObj.addClass("showWidth");
var elemW = 68;
var oldVal = 0;
var newVal: any = 0;
var t = { left: 0, top: 0 };
var absW = jQuery(inObj).outerWidth(true) + 10;
var absH = jQuery(inObj).outerHeight(true);
var absT = t.top - 4;
var absL = isNaN(t.left + parseInt(jQuery(inObj).css('marginLeft'), 10) - 4) ? 0 : (t.left + parseInt(jQuery(inObj).css('marginLeft'), 10) - 4);
var regClean = new RegExp(' ', 'gi');
var aripm = new RegExp(/[\+\-\*\/]/);
var aripmSt = new RegExp(/^[\+\-\*\/]/);
var toOldVal = false;
jQuery(inObj).parent().find(".calculateWrapper").remove();
if (jQuery(inObj).hasClass("roundTo4")) {
this.options.fixed = 4;
}
/* Создаем не указанные элементы */
var calcwrapper;
if (!jQuery(inObj).hasClass("showWidth")) {
calcwrapper = jQuery('