class DueuiWidget extends DueuiElement { constructor(html_element, config, parent){ super(html_element, config, parent); if (this.tolerance) { if (this.tolerance.tolerances) { this.tolerance.last = -1; if (!this.tolerance.default_style) { let style_keys = {}; for (let t of this.tolerance.tolerances) { $.extend(style_keys, t.style); } style_keys = Object.keys(style_keys); this.tolerance.default_style = this.jq.css(style_keys); } if (this.tolerance.tolerances[0].classes) { this.tolerance.merged_classes = []; for (let t of this.tolerance.tolerances) { let sc = t.classes; for (let c of sc.split(" ")) { if (!this.tolerance.merged_classes.includes(c)) { this.tolerance.merged_classes.push(c); } } } } if (!this.onstatus) { this.onstatus = (status) => { this.processTolerance(status); }; } } } if (this.state) { this.state.last = -2; this.state.current = 0; this.state.merged_classes = []; for (let s of this.state.states) { if (s.classes) { for (let c of s.classes.split(" ")) { if (!this.state.merged_classes.includes(c)) { this.state.merged_classes.push(c); } } } } } if (((this.value && typeof(this.value) === 'string' && this.value.indexOf("${") >= 0) || (this.state && this.state.field) || this.onstatus)) { this.addClasses("state-poll-listener"); this.jq.on("duet_poll_response", (event, status) => { this.current_status = status; if (this.value.indexOf("${") >= 0) { var val = DueUI.evalStatus(status, this.value, this); this.val(val); } if (this.state && this.state.field) { this.state.current = DueUI.evalStatus(status, this.state.field); this.applyState(this.state.current); } if (this.onstatus) { this.onstatus(status); } }); } } clearTolerance() { if (this.tolerance.default_style) { this.css(this.tolerance.default_style); } if (this.tolerance.merged_classes) { this.removeClasses(this.tolerance.merged_classes); } } processTolerance(status, val) { if (typeof(val) === 'undefined') { var val = (typeof(this.tolerance.field) === 'undefined' ? this.val() : this.tolerance.field); } if (typeof(val) === 'string') { val = DueUI.evalStatus(status, val, this); } let ix = 0; for (let t of this.tolerance.tolerances) { if (val <= t.limit) { if (ix != this.tolerance.last) { if (t.style) { this.jq.css(t.style); } if (t.classes) { this.removeClasses(this.tolerance.merged_classes); this.addClasses(t.classes); } this.tolerance.last = ix; } break; } ix++; } } val(val, skipcheck) { var value_object = this.value_object || this.jq; if (typeof(val) === 'undefined') { if (typeof(this.value_function) === 'string') { return value_object[this.value_function](); } else { return this.value_function(); } } if (skipcheck || val !== this.last_value) { if (typeof(this.value_function) === 'string') { value_object[this.value_function](val); } else { this.value_function(val); } this.last_value = val; } } } class DueuiButtonWidget extends DueuiWidget { constructor(config, parent){ if (config.actions_chooser) { super("div", $.extend(true, { "initial_value": "", "value": "", "style": { "pointer-events": config.read_only ? "none" : null } }, config, {"style": {}, "classes": "btn-group dropright"}), parent); this.jq_btn_id = `${this.id}_btn`; this.jq_btn = $( ``); this.css_object = this.jq_btn; this.value_function = "html"; this.value_object = this.jq_btn; this.jq.append(this.jq_btn); DueuiElement.updateClasses(this.jq_btn, config.classes || ""); this.jq_btn.css(config.style || {}); this.jq_drop = $(`