* @default null
*/
+ /**
+ * Register a custom value change handler.
+ *
+ * If this property is set to a function value, the function is invoked
+ * whenever the value of the underlying UI input element is changing.
+ *
+ * The invoked handler function will receive the DOM click element as
+ * first and the underlying configuration section ID as well as the input
+ * value as second and third argument respectively.
+ *
+ * @name LuCI.form.AbstractValue.prototype#onchange
+ * @type function
+ * @default null
+ */
+
/**
* Add a dependency contraint to the option.
*
.then(this.renderFrame.bind(this, section_id, in_table, option_index));
},
+ /** @private */
+ handleValueChange: function(section_id, state, ev) {
+ if (typeof(this.onchange) != 'function')
+ return;
+
+ var value = this.formvalue(section_id);
+
+ if (isEqual(value, state.previousValue))
+ return;
+
+ state.previousValue = value;
+ this.onchange.call(this, ev, section_id, value);
+ },
+
/** @private */
renderFrame: function(section_id, in_table, option_index, nodes) {
var config_name = this.uciconfig || this.section.uciconfig || this.map.config,
if (depend_list && depend_list.length)
optionEl.classList.add('hidden');
+ optionEl.addEventListener('widget-change',
+ L.bind(this.handleValueChange, this, section_id, {}));
+
optionEl.addEventListener('widget-change',
L.bind(this.map.checkDepends, this.map));