this._field = elById(fieldId);
if (this._field === null) {
- throw new Error("Unknown field with id '" + fieldId + "'.");
- }
-
- this._fields = [this._field];
-
- // handle special case of boolean form fields that have to form fields
- if (this._field.tagName === 'INPUT' && this._field.type === 'radio' && elData(this._field, 'no-input-id') !== '') {
- this._noField = elById(elData(this._field, 'no-input-id'));
- if (this._noField === null) {
- throw new Error("Cannot find 'no' input field for input field '" + fieldId + "'");
+ this._fields = [];
+ elBySelAll('input[type=radio][name=' + fieldId + ']', undefined, function(field) {
+ this._fields.push(field);
+ }.bind(this));
+
+ if (!this._fields.length) {
+ throw new Error("Unknown field with id '" + fieldId + "'.");
}
+ }
+ else {
+ this._fields = [this._field];
- this._fields.push(this._noField);
+ // handle special case of boolean form fields that have to form fields
+ if (this._field.tagName === 'INPUT' && this._field.type === 'radio' && elData(this._field, 'no-input-id') !== '') {
+ this._noField = elById(elData(this._field, 'no-input-id'));
+ if (this._noField === null) {
+ throw new Error("Cannot find 'no' input field for input field '" + fieldId + "'");
+ }
+
+ this._fields.push(this._noField);
+ }
}
DependencyManager.addDependency(this);
var fields = dependency.getFields();
for (var i = 0, length = fields.length; i < length; i++) {
var field = fields[i];
- if (!_fields.has(field.id)) {
- _fields.set(field.id, field);
+ var id = DomUtil.identify(field);
+
+ if (!_fields.has(id)) {
+ _fields.set(id, field);
if (field.tagName === 'INPUT' && (field.type === 'checkbox' || field.type === 'radio')) {
field.addEventListener('change', this.checkDependencies.bind(this));
}
}
- // no node dependencies is met
+ // no node dependency is met
this._hide(dependentNode);
}.bind(this));
* @return {boolean}
*/
isHiddenByDependencies: function(node) {
- return _dependencyHiddenNodes.has(node);
+ if (_dependencyHiddenNodes.has(node)) {
+ return true;
+ }
+
+ var returnValue = false;
+ _dependencyHiddenNodes.forEach(function(hiddenNode) {
+ if (DomUtil.contains(hiddenNode, node)) {
+ returnValue = true;
+ }
+ });
+
+ return returnValue;
},
/**
* @see module:WoltLabSuite/Core/Form/Builder/Field/Dependency/Abstract
* @since 3.2
*/
-define(['./Abstract', 'Core'], function(Abstract, Core) {
+define(['./Abstract', 'Core', './Manager'], function(Abstract, Core, Manager) {
"use strict";
/**
throw new Error("Values have not been set.");
}
+ var value;
+ if (this._field) {
+ if (Manager.isHiddenByDependencies(this._field)) {
+ return false;
+ }
+
+ value = this._field.value;
+ }
+ else {
+ for (var i = 0, length = this._fields.length, field; i < length; i++) {
+ field = this._fields[i];
+
+ if (field.checked) {
+ if (Manager.isHiddenByDependencies(field)) {
+ return false;
+ }
+
+ value = field.value;
+
+ break;
+ }
+ }
+ }
+
// do not use `Array.prototype.indexOf()` as we use a weak comparision
for (var i = 0, length = this._values.length; i < length; i++) {
- if (this._values[i] == this._field.value) {
+ if (this._values[i] == value) {
return true;
}
}