Skip to content

Commit

Permalink
Fix Choices was not disable in a <fieldset disabled> Choices-js#1132
Browse files Browse the repository at this point in the history
  • Loading branch information
Xon committed Aug 9, 2024
1 parent 8a46a71 commit 6b56ae0
Show file tree
Hide file tree
Showing 23 changed files with 124 additions and 29 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

### Bug Fixes (from 10.2.0)
* Fix Choices does not accept an element from an iframe [#1057](https://github.com/Choices-js/Choices/issues/1057)
* Fix Choices was not disable in a `<fieldset disabled>` [#1132](https://github.com/Choices-js/Choices/issues/1132)

## [11.0.0-rc5] (2024-08-08)

Expand Down
8 changes: 6 additions & 2 deletions public/assets/scripts/choices.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -3812,8 +3812,12 @@ var Choices = /** @class */ (function () {
this._store.subscribe(this._render);
this._render();
this._addEventListeners();
var shouldDisable = !this.config.addItems ||
this.passedElement.element.hasAttribute('disabled');
var shouldDisable = (this._isTextElement && !this.config.addItems) ||
(this._isSelectElement &&
!this.config.addChoices &&
this._store.choices.length === 0) ||
this.passedElement.element.hasAttribute('disabled') ||
!!this.passedElement.element.closest('fieldset:disabled');
if (shouldDisable) {
this.disable();
}
Expand Down
8 changes: 6 additions & 2 deletions public/assets/scripts/choices.js
Original file line number Diff line number Diff line change
Expand Up @@ -3816,8 +3816,12 @@
this._store.subscribe(this._render);
this._render();
this._addEventListeners();
var shouldDisable = !this.config.addItems ||
this.passedElement.element.hasAttribute('disabled');
var shouldDisable = (this._isTextElement && !this.config.addItems) ||
(this._isSelectElement &&
!this.config.addChoices &&
this._store.choices.length === 0) ||
this.passedElement.element.hasAttribute('disabled') ||
!!this.passedElement.element.closest('fieldset:disabled');
if (shouldDisable) {
this.disable();
}
Expand Down
2 changes: 1 addition & 1 deletion public/assets/scripts/choices.min.cjs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/assets/scripts/choices.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/assets/scripts/choices.min.mjs

Large diffs are not rendered by default.

8 changes: 6 additions & 2 deletions public/assets/scripts/choices.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3810,8 +3810,12 @@ var Choices = /** @class */ (function () {
this._store.subscribe(this._render);
this._render();
this._addEventListeners();
var shouldDisable = !this.config.addItems ||
this.passedElement.element.hasAttribute('disabled');
var shouldDisable = (this._isTextElement && !this.config.addItems) ||
(this._isSelectElement &&
!this.config.addChoices &&
this._store.choices.length === 0) ||
this.passedElement.element.hasAttribute('disabled') ||
!!this.passedElement.element.closest('fieldset:disabled');
if (shouldDisable) {
this.disable();
}
Expand Down
8 changes: 6 additions & 2 deletions public/assets/scripts/choices.search-basic.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -3330,8 +3330,12 @@ var Choices = /** @class */ (function () {
this._store.subscribe(this._render);
this._render();
this._addEventListeners();
var shouldDisable = !this.config.addItems ||
this.passedElement.element.hasAttribute('disabled');
var shouldDisable = (this._isTextElement && !this.config.addItems) ||
(this._isSelectElement &&
!this.config.addChoices &&
this._store.choices.length === 0) ||
this.passedElement.element.hasAttribute('disabled') ||
!!this.passedElement.element.closest('fieldset:disabled');
if (shouldDisable) {
this.disable();
}
Expand Down
8 changes: 6 additions & 2 deletions public/assets/scripts/choices.search-basic.js
Original file line number Diff line number Diff line change
Expand Up @@ -3334,8 +3334,12 @@
this._store.subscribe(this._render);
this._render();
this._addEventListeners();
var shouldDisable = !this.config.addItems ||
this.passedElement.element.hasAttribute('disabled');
var shouldDisable = (this._isTextElement && !this.config.addItems) ||
(this._isSelectElement &&
!this.config.addChoices &&
this._store.choices.length === 0) ||
this.passedElement.element.hasAttribute('disabled') ||
!!this.passedElement.element.closest('fieldset:disabled');
if (shouldDisable) {
this.disable();
}
Expand Down
2 changes: 1 addition & 1 deletion public/assets/scripts/choices.search-basic.min.cjs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/assets/scripts/choices.search-basic.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/assets/scripts/choices.search-basic.min.mjs

Large diffs are not rendered by default.

8 changes: 6 additions & 2 deletions public/assets/scripts/choices.search-basic.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3328,8 +3328,12 @@ var Choices = /** @class */ (function () {
this._store.subscribe(this._render);
this._render();
this._addEventListeners();
var shouldDisable = !this.config.addItems ||
this.passedElement.element.hasAttribute('disabled');
var shouldDisable = (this._isTextElement && !this.config.addItems) ||
(this._isSelectElement &&
!this.config.addChoices &&
this._store.choices.length === 0) ||
this.passedElement.element.hasAttribute('disabled') ||
!!this.passedElement.element.closest('fieldset:disabled');
if (shouldDisable) {
this.disable();
}
Expand Down
8 changes: 6 additions & 2 deletions public/assets/scripts/choices.search-prefix.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -2196,8 +2196,12 @@ var Choices = /** @class */ (function () {
this._store.subscribe(this._render);
this._render();
this._addEventListeners();
var shouldDisable = !this.config.addItems ||
this.passedElement.element.hasAttribute('disabled');
var shouldDisable = (this._isTextElement && !this.config.addItems) ||
(this._isSelectElement &&
!this.config.addChoices &&
this._store.choices.length === 0) ||
this.passedElement.element.hasAttribute('disabled') ||
!!this.passedElement.element.closest('fieldset:disabled');
if (shouldDisable) {
this.disable();
}
Expand Down
8 changes: 6 additions & 2 deletions public/assets/scripts/choices.search-prefix.js
Original file line number Diff line number Diff line change
Expand Up @@ -2200,8 +2200,12 @@
this._store.subscribe(this._render);
this._render();
this._addEventListeners();
var shouldDisable = !this.config.addItems ||
this.passedElement.element.hasAttribute('disabled');
var shouldDisable = (this._isTextElement && !this.config.addItems) ||
(this._isSelectElement &&
!this.config.addChoices &&
this._store.choices.length === 0) ||
this.passedElement.element.hasAttribute('disabled') ||
!!this.passedElement.element.closest('fieldset:disabled');
if (shouldDisable) {
this.disable();
}
Expand Down
2 changes: 1 addition & 1 deletion public/assets/scripts/choices.search-prefix.min.cjs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/assets/scripts/choices.search-prefix.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/assets/scripts/choices.search-prefix.min.mjs

Large diffs are not rendered by default.

8 changes: 6 additions & 2 deletions public/assets/scripts/choices.search-prefix.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2194,8 +2194,12 @@ var Choices = /** @class */ (function () {
this._store.subscribe(this._render);
this._render();
this._addEventListeners();
var shouldDisable = !this.config.addItems ||
this.passedElement.element.hasAttribute('disabled');
var shouldDisable = (this._isTextElement && !this.config.addItems) ||
(this._isSelectElement &&
!this.config.addChoices &&
this._store.choices.length === 0) ||
this.passedElement.element.hasAttribute('disabled') ||
!!this.passedElement.element.closest('fieldset:disabled');
if (shouldDisable) {
this.disable();
}
Expand Down
20 changes: 20 additions & 0 deletions public/test/select-multiple/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,22 @@ <h2>Select multiple inputs</h2>
</select>
</div>

<div data-test-hook="disabled-via-fieldset">
<fieldset disabled>
<label for="choices-disabled-via-fieldset">Disabled via fieldset</label>
<select
class="form-control"
name="choices-disabled-via-fieldset"
id="choices-disabled-via-fieldset"
multiple
>
<option value="Choice 1" selected>Choice 1</option>
<option value="Choice 2">Choice 2</option>
<option value="Choice 3">Choice 3</option>
</select>
</fieldset>
</div>

<div data-test-hook="disabled-via-attr">
<label for="choices-disabled-via-attr">Disabled via attribute</label>
<select
Expand Down Expand Up @@ -489,6 +505,10 @@ <h2>Select multiple inputs</h2>
addItems: false,
});

new Choices('#choices-disabled-via-fieldset', {
allowHTML: true,
});

new Choices('#choices-disabled-via-attr', {
allowHTML: true,
});
Expand Down
19 changes: 19 additions & 0 deletions public/test/select-one/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,21 @@ <h2>Select one inputs</h2>
</select>
</div>

<div data-test-hook="disabled-via-fieldset">
<fieldset disabled>
<label for="choices-disabled-via-attr">Disabled via fieldset</label>
<select
class="form-control"
name="choices-disabled-via-fieldset"
id="choices-disabled-via-fieldset"
>
<option value="Choice 1" selected>Choice 1</option>
<option value="Choice 2">Choice 2</option>
<option value="Choice 3">Choice 3</option>
</select>
</fieldset>
</div>

<div data-test-hook="disabled-via-attr">
<label for="choices-disabled-via-attr">Disabled via attribute</label>
<select
Expand Down Expand Up @@ -528,6 +543,10 @@ <h2>Select one inputs</h2>
addItems: false,
});

new Choices('#choices-disabled-via-fieldset', {
allowHTML: true,
});

new Choices('#choices-disabled-via-attr', {
allowHTML: true,
});
Expand Down
15 changes: 15 additions & 0 deletions public/test/text/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,17 @@ <h2>Text inputs</h2>
/>
</div>

<div data-test-hook="disabled-via-fieldset">
<label for="choices-disabled-via-fieldset">Disabled via fieldset</label>
<fieldset disabled>
<input
class="form-control"
id="choices-disabled-via-fieldset"
type="text"
/>
</fieldset>
</div>

<div data-test-hook="disabled-via-attr">
<label for="choices-disabled-via-attr">Disabled via attribute</label>
<input
Expand Down Expand Up @@ -233,6 +244,10 @@ <h2>Text inputs</h2>
addItems: false,
});

new Choices('#choices-disabled-via-fieldset', {
allowHTML: true,
});

new Choices('#choices-disabled-via-attr', {
allowHTML: true,
});
Expand Down
8 changes: 6 additions & 2 deletions src/scripts/choices.ts
Original file line number Diff line number Diff line change
Expand Up @@ -388,8 +388,12 @@ class Choices implements ChoicesInterface {
this._addEventListeners();

const shouldDisable =
!this.config.addItems ||
this.passedElement.element.hasAttribute('disabled');
(this._isTextElement && !this.config.addItems) ||
(this._isSelectElement &&
!this.config.addChoices &&
this._store.choices.length === 0) ||
this.passedElement.element.hasAttribute('disabled') ||
!!this.passedElement.element.closest('fieldset:disabled');

if (shouldDisable) {
this.disable();
Expand Down

0 comments on commit 6b56ae0

Please sign in to comment.