Skip to content

Commit

Permalink
Add regexp compare for data-display-dependency-value (#3802)
Browse files Browse the repository at this point in the history
  • Loading branch information
luelista committed Jan 9, 2024
1 parent 0f44702 commit bfe0b21
Showing 1 changed file with 16 additions and 11 deletions.
27 changes: 16 additions & 11 deletions src/pretix/static/pretixcontrol/js/ui/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -322,9 +322,17 @@ var form_handlers = function (el) {
}
});

function findDependency(searchString, sourceElement) {
if (searchString.substr(0, 1) === '<') {
return $(sourceElement).closest("form, .form-horizontal").find(searchString.substr(1));
} else {
return $(searchString);
}
}

el.find("input[data-checkbox-dependency]").each(function () {
var dependent = $(this),
dependency = $($(this).attr("data-checkbox-dependency")),
dependency = findDependency($(this).attr("data-checkbox-dependency"), this),
update = function () {
var enabled = dependency.prop('checked');
dependent.prop('disabled', !enabled).closest('.form-group, .form-field-boundary').toggleClass('disabled', !enabled);
Expand All @@ -337,14 +345,8 @@ var form_handlers = function (el) {
});

el.find("select[data-inverse-dependency], input[data-inverse-dependency]").each(function () {
var dependency = $(this).attr("data-inverse-dependency");
if (dependency.substr(0, 1) === '<') {
dependency = $(this).closest("form, .form-horizontal").find(dependency.substr(1));
} else {
dependency = $(dependency);
}

var dependent = $(this),
dependency = findDependency($(this).attr("data-inverse-dependency"), this),
update = function () {
var enabled = !dependency.prop('checked');
dependent.prop('disabled', !enabled).closest('.form-group, .form-field-boundary').toggleClass('disabled', !enabled);
Expand All @@ -355,14 +357,17 @@ var form_handlers = function (el) {

el.find("div[data-display-dependency], textarea[data-display-dependency], input[data-display-dependency], select[data-display-dependency]").each(function () {
var dependent = $(this),
dependency = $($(this).attr("data-display-dependency")),
dependency = findDependency($(this).attr("data-display-dependency"), this),
update = function (ev) {
var enabled = dependency.toArray().some(function(d) {
if (d.type === 'checkbox' || d.type === 'radio') {
return d.checked;
} else if (d.type === 'select-one') {
if (dependent.attr("data-display-dependency-value")) {
return d.value === dependent.attr("data-display-dependency-value");
var checkValue;
if ((checkValue = /^\/(.*)\/$/.exec(dependent.attr("data-display-dependency-regex")))) {
return new RegExp(checkValue[1]).test(d.value);
} else if ((checkValue = dependent.attr("data-display-dependency-value"))) {
return d.value === checkValue;
} else {
return !!d.value
}
Expand Down

0 comments on commit bfe0b21

Please sign in to comment.