Skip to content
This repository was archived by the owner on Oct 2, 2019. It is now read-only.

adding ability to disable a ui-select by setting its ancestor fieldset's disabled property #415

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/bootstrap/match-multiple.tpl.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
class="ui-select-match-item btn btn-default btn-xs"
tabindex="-1"
type="button"
ng-disabled="$select.disabled"
ng-disabled="$select.disabled || $select.ancestorFieldsetDisabled()"
ng-click="$select.activeMatchIndex = $index;"
ng-class="{'btn-primary':$select.activeMatchIndex === $index}">
<span class="close ui-select-match-close" ng-hide="$select.disabled" ng-click="$select.removeChoice($index)">&nbsp;&times;</span>
<span class="close ui-select-match-close" ng-hide="$select.disabled || $select.ancestorFieldsetDisabled()" ng-click="$select.removeChoice($index)">&nbsp;&times;</span>
<span uis-transclude-append></span>
</span>
</span>
Expand Down
2 changes: 1 addition & 1 deletion src/bootstrap/match.tpl.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<button type="button" class="btn btn-default form-control ui-select-match" tabindex="-1"
ng-hide="$select.open"
ng-disabled="$select.disabled"
ng-disabled="$select.disabled || $select.ancestorFieldsetDisabled()"
ng-class="{'btn-default-focus':$select.focus}";
ng-click="$select.activate()">
<span ng-show="$select.isEmpty()" class="text-muted">{{$select.placeholder}}</span>
Expand Down
4 changes: 2 additions & 2 deletions src/bootstrap/select-multiple.tpl.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
spellcheck="false"
class="ui-select-search input-xs"
placeholder="{{$select.getPlaceholder()}}"
ng-disabled="$select.disabled"
ng-hide="$select.disabled"
ng-disabled="$select.disabled || $select.ancestorFieldsetDisabled()"
ng-hide="$select.disabled || $select.ancestorFieldsetDisabled()"
ng-click="$select.activate()"
ng-model="$select.search">
</div>
Expand Down
19 changes: 18 additions & 1 deletion src/select.js
Original file line number Diff line number Diff line change
Expand Up @@ -183,10 +183,27 @@
}
}
}

// returns whether or not the select box has an ancestor fieldset that is has the disabled attribute set
ctrl.ancestorFieldsetDisabled = function() {
// initial call should not pass in any arguments to trigger the default value being set.
if (angular.isUndefined(arguments[0])) return ctrl.ancestorFieldsetDisabled($element[0]);

var cur = arguments[0];

// if we are at the fieldset ancestor.
if (cur.tagName === 'FIELDSET') return cur.disabled; // return whether or not it is disabled.

if (cur.tagName === 'HTML') return false; // if we are at the html ancestor, then there was no fieldset ancestor so just return false.
// technically we can bail once it gets to a 'FORM' ancestor, but not everyone uses forms
// controls strictly in form tags.

return ctrl.ancestorFieldsetDisabled(cur.parentElement);
};

// When the user clicks on ui-select, displays the dropdown list
ctrl.activate = function(initSearchValue, avoidReset) {
if (!ctrl.disabled && !ctrl.open) {
if (!ctrl.disabled && !ctrl.ancestorFieldsetDisabled() && !ctrl.open) {
if(!avoidReset) _resetSearchInput();
ctrl.focusser.prop('disabled', true); //Will reactivate it on .close()
ctrl.open = true;
Expand Down
6 changes: 3 additions & 3 deletions src/select2/select-multiple.tpl.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<div class="ui-select-multiple select2 select2-container select2-container-multi"
ng-class="{'select2-container-active select2-dropdown-open': $select.open,
'select2-container-disabled': $select.disabled}">
'select2-container-disabled': $select.disabled || $select.ancestorFieldsetDisabled()}">
<ul class="select2-choices">
<span class="ui-select-match"></span>
<li class="select2-search-field">
Expand All @@ -12,8 +12,8 @@
spellcheck="false"
class="select2-input ui-select-search"
placeholder="{{$select.getPlaceholder()}}"
ng-disabled="$select.disabled"
ng-hide="$select.disabled"
ng-disabled="$select.disabled || $select.ancestorFieldsetDisabled()"
ng-hide="$select.disabled || $select.ancestorFieldsetDisabled()"
ng-model="$select.search"
ng-click="$select.activate()"
style="width: 34px;">
Expand Down
2 changes: 1 addition & 1 deletion src/select2/select.tpl.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<div class="select2 select2-container"
ng-class="{'select2-container-active select2-dropdown-open': $select.open,
'select2-container-disabled': $select.disabled,
'select2-container-disabled': $select.disabled || $select.ancestorFieldsetDisabled(),
'select2-container-active': $select.focus }">
<div class="ui-select-match"></div>
<div class="select2-drop select2-with-searchbox select2-drop-active"
Expand Down
4 changes: 2 additions & 2 deletions src/selectize/select.tpl.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<div class="selectize-control single">
<div class="selectize-input"
ng-class="{'focus': $select.open, 'disabled': $select.disabled, 'selectize-focus' : $select.focus}"
ng-class="{'focus': $select.open, 'disabled': $select.disabled || $select.ancestorFieldsetDisabled(), 'selectize-focus' : $select.focus}"
ng-click="$select.activate()">
<div class="ui-select-match"></div>
<input type="text" autocomplete="off" tabindex="-1"
Expand All @@ -9,7 +9,7 @@
placeholder="{{$select.placeholder}}"
ng-model="$select.search"
ng-hide="!$select.searchEnabled || ($select.selected && !$select.open)"
ng-disabled="$select.disabled">
ng-disabled="$select.disabled || $select.ancestorFieldsetDisabled()">
</div>
<div class="ui-select-choices"></div>
</div>