select2 업그레이드
This commit is contained in:
Vendored
+2
-2
@@ -1,3 +1,3 @@
|
||||
/*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
|
||||
|
||||
(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})();
|
||||
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(n){return"너무 깁니다. "+(n.input.length-n.maximum)+" 글자 지워주세요."},inputTooShort:function(n){return"너무 짧습니다. "+(n.minimum-n.input.length)+" 글자 더 입력해주세요."},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(n){return"최대 "+n.maximum+"개까지만 선택 가능합니다."},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"},removeAllItems:function(){return"모든 항목 삭제"}}}),n.define,n.require}();
|
||||
Vendored
+553
-188
@@ -1,188 +1,553 @@
|
||||
/* select2-bootstrap4 with Darkly */
|
||||
.select2-container--bootstrap4 { color: black; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection { background-color: #fff; border: 1px solid #ced4da; border-radius: 0.25rem; color: #495057; font-size: 1rem; outline: 0; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection.form-control { border-radius: 0.25rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-search--dropdown .select2-search__field { background-color: #fff; border: 1px solid #ced4da; border-radius: 0.25rem; color: #495057; font-size: 1rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-search__field { outline: 0; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-search__field::-webkit-input-placeholder { color: #6c757d; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-search__field:-moz-placeholder { color: #6c757d; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-search__field::-moz-placeholder { color: #6c757d; opacity: 1; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-search__field:-ms-input-placeholder { color: #6c757d; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option { padding: 0.75rem 0.375rem; font-size: 1rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option[role=group] { padding: 0; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option[aria-disabled=true] { color: #6c757d; cursor: not-allowed; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option[aria-selected=true] { background-color: #f8f9fa; color: #16181b; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option--highlighted[aria-selected] { background-color: #007bff; color: #fff; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option { padding: 0.75rem 0.375rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__group { padding-left: 0; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option { margin-left: -0.375rem; padding-left: 0.75rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option .select2-results__option { margin-left: -0.75rem; padding-left: 1.125rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { margin-left: -1.125rem; padding-left: 1.5rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { margin-left: -1.5rem; padding-left: 1.875rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { margin-left: -1.875rem; padding-left: 2.25rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__group { color: #6c757d; display: block; padding: 0.75rem 0.375rem; font-size: 75%; line-height: 1; white-space: nowrap; }
|
||||
|
||||
.select2-container--bootstrap4.select2-container--focus .select2-selection, .select2-container--bootstrap4.select2-container--open .select2-selection { transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; border-color: #80bdff; }
|
||||
|
||||
@media screen and (prefers-reduced-motion: reduce) { .select2-container--bootstrap4.select2-container--focus .select2-selection, .select2-container--bootstrap4.select2-container--open .select2-selection { transition: none; } }
|
||||
|
||||
.select2-container--bootstrap4.select2-container--open .select2-selection .select2-selection__arrow b { border-color: transparent transparent #6c757d transparent; border-width: 0 0.25rem 0.25rem 0.25rem; }
|
||||
|
||||
.select2-container--bootstrap4.select2-container--open.select2-container--below .select2-selection { border-bottom-right-radius: 0; border-bottom-left-radius: 0; border-bottom-color: transparent; }
|
||||
|
||||
.select2-container--bootstrap4.select2-container--open.select2-container--above .select2-selection { border-top-left-radius: 0; border-top-right-radius: 0; border-top-color: transparent; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection__clear { color: #6c757d; cursor: pointer; float: right; font-weight: bold; margin-right: 10px; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection__clear:hover { color: #343a40; }
|
||||
|
||||
.select2-container--bootstrap4.select2-container--disabled .select2-selection { border-color: #ced4da; }
|
||||
|
||||
.select2-container--bootstrap4.select2-container--disabled .select2-selection, .select2-container--bootstrap4.select2-container--disabled .select2-search__field { cursor: not-allowed; }
|
||||
|
||||
.select2-container--bootstrap4.select2-container--disabled .select2-selection, .select2-container--bootstrap4.select2-container--disabled .select2-selection--multiple .select2-selection__choice { background-color: #e9ecef; }
|
||||
|
||||
.select2-container--bootstrap4.select2-container--disabled .select2-selection__clear, .select2-container--bootstrap4.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove { display: none; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-dropdown { border-color: #80bdff; border-width: 1px; overflow-x: hidden; margin-top: -1px; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-dropdown--above { margin-top: 1px; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-results > .select2-results__options { max-height: 200px; overflow-y: auto; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single { height: calc(2.25rem + 2px); line-height: 1; padding: 0.75rem 1.125rem 0.75rem 0.375rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow { position: absolute; bottom: 0; right: 0.375rem; top: 0; width: 0.25rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b { border-color: #6c757d transparent transparent transparent; border-style: solid; border-width: 0.25rem 0.25rem 0 0.25rem; height: 0; left: 0; margin-left: -0.25rem; margin-top: -0.125rem; position: absolute; top: 50%; width: 0; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered { color: #495057; padding: 0; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single .select2-selection__placeholder { color: #6c757d; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple { min-height: calc(2.25rem + 2px); padding: 0; height: auto; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__rendered { box-sizing: border-box; display: block; line-height: 1; list-style: none; margin: 0; overflow: hidden; padding: 0.75rem 0.375rem 0 0.75rem; width: 100%; text-overflow: ellipsis; white-space: nowrap; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__placeholder { color: #6c757d; float: left; margin-top: 5px; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice { color: #495057; background: transparent; border: 1px solid #343a40; border-radius: 0.25rem; cursor: default; float: left; margin: -0.25rem 0 0 0.1875rem; padding: 0 0.75rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field { background: transparent; padding: 0 0.375rem; height: calc(2.25rem + 2px)-2; line-height: 1; margin-top: 0; min-width: 5em; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice__remove { color: #6c757d; cursor: pointer; display: inline-block; font-weight: bold; margin-right: 0.375rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice__remove:hover { color: #343a40; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear { margin-top: 0.75rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single.input-sm, .input-group-sm .select2-container--bootstrap4 .select2-selection--single, .form-group-sm .select2-container--bootstrap4 .select2-selection--single { border-radius: 0.2rem; font-size: 75%; height: calc(1.8125rem + 2px); line-height: 1; padding: 0.5rem 1rem 0.5rem 0.25rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single.input-sm .select2-selection__arrow b, .input-group-sm .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b, .form-group-sm .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b { margin-left: -0.5rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-sm, .input-group-sm .select2-container--bootstrap4 .select2-selection--multiple, .form-group-sm .select2-container--bootstrap4 .select2-selection--multiple { min-height: calc(1.8125rem + 2px); border-radius: 0.2rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-sm .select2-selection__rendered, .input-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__rendered, .form-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__rendered { padding: 0.5rem 0.25rem 0 0.5rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-sm .select2-selection__choice, .input-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice, .form-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice { font-size: 75%; line-height: 1; margin: 0 0 0 0.125rem; padding: 0 0.5rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-sm .select2-search--inline .select2-search__field, .input-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field, .form-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field { padding: 0 0.25rem; font-size: 75%; height: calc(1.8125rem + 2px)-2; line-height: 1; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-sm .select2-selection__clear, .input-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear, .form-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear { margin-top: 0.5rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single.input-lg, .input-group-lg .select2-container--bootstrap4 .select2-selection--single, .form-group-lg .select2-container--bootstrap4 .select2-selection--single { border-radius: 0.3rem; font-size: 1.25rem; height: calc(2.875rem + 2px); line-height: 1; padding: 1rem 1.4375rem 1rem 0.5rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single.input-lg .select2-selection__arrow, .input-group-lg .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow, .form-group-lg .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow { width: 0.3125rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single.input-lg .select2-selection__arrow b, .input-group-lg .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b, .form-group-lg .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b { border-width: 0.3125rem 0.3125rem 0 0.3125rem; margin-left: -0.3125rem; margin-left: -1rem; margin-top: -0.15625rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-lg, .input-group-lg .select2-container--bootstrap4 .select2-selection--multiple, .form-group-lg .select2-container--bootstrap4 .select2-selection--multiple { min-height: calc(2.875rem + 2px); border-radius: 0.3rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-lg .select2-selection__choice, .input-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice, .form-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice { font-size: 1.25rem; line-height: 1; border-radius: 0.25rem; margin: 0rem 0 0 0.25rem; padding: 0 1rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-lg .select2-search--inline .select2-search__field, .input-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field, .form-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field { padding: 0 0.5rem; font-size: 1.25rem; height: calc(2.875rem + 2px)-2; line-height: 1; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-lg .select2-selection__clear, .input-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear, .form-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear { margin-top: 1rem; }
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b { border-color: transparent transparent #6c757d transparent; border-width: 0 0.3125rem 0.3125rem 0.3125rem; }
|
||||
|
||||
.input-group-lg .select2-container--bootstrap4 .select2-selection.select2-container--open .select2-selection--single .select2-selection__arrow b { border-color: transparent transparent #6c757d transparent; border-width: 0 0.3125rem 0.3125rem 0.3125rem; }
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single { padding-left: 1.125rem; padding-right: 0.375rem; }
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single .select2-selection__rendered { padding-right: 0; padding-left: 0; text-align: right; }
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single .select2-selection__clear { float: left; }
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single .select2-selection__arrow { left: 0.375rem; right: auto; }
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single .select2-selection__arrow b { margin-left: 0; }
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-search--inline { float: right; }
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-selection__choice { margin-left: 0; margin-right: 0.1875rem; }
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { margin-left: 2px; margin-right: auto; }
|
||||
|
||||
.has-warning .select2-dropdown, .has-warning .select2-selection { border-color: #ffc107; }
|
||||
|
||||
.has-warning .select2-container--focus .select2-selection, .has-warning .select2-container--open .select2-selection { border-color: #d39e00; }
|
||||
|
||||
.has-warning.select2-drop-active { border-color: #d39e00; }
|
||||
|
||||
.has-warning.select2-drop-active.select2-drop.select2-drop-above { border-top-color: #d39e00; }
|
||||
|
||||
.has-error .select2-dropdown, .has-error .select2-selection { border-color: #dc3545; }
|
||||
|
||||
.has-error .select2-container--focus .select2-selection, .has-error .select2-container--open .select2-selection { border-color: #bd2130; }
|
||||
|
||||
.has-error.select2-drop-active { border-color: #bd2130; }
|
||||
|
||||
.has-error.select2-drop-active.select2-drop.select2-drop-above { border-top-color: #bd2130; }
|
||||
|
||||
.has-success .select2-dropdown, .has-success .select2-selection { border-color: #28a745; }
|
||||
|
||||
.has-success .select2-container--focus .select2-selection, .has-success .select2-container--open .select2-selection { border-color: #1e7e34; }
|
||||
|
||||
.has-success.select2-drop-active { border-color: #1e7e34; }
|
||||
|
||||
.has-success.select2-drop-active.select2-drop.select2-drop-above { border-top-color: #1e7e34; }
|
||||
|
||||
.input-group > .select2-hidden-accessible:first-child + .select2-container--bootstrap4 > .selection > .select2-selection, .input-group > .select2-hidden-accessible:first-child + .select2-container--bootstrap4 > .selection > .select2-selection.form-control { border-top-right-radius: 0; border-bottom-right-radius: 0; }
|
||||
|
||||
.input-group > .select2-hidden-accessible:not(:first-child) + .select2-container--bootstrap4:not(:last-child) > .selection > .select2-selection, .input-group > .select2-hidden-accessible:not(:first-child) + .select2-container--bootstrap4:not(:last-child) > .selection > .select2-selection.form-control { border-radius: 0; }
|
||||
|
||||
.input-group > .select2-hidden-accessible:not(:first-child):not(:last-child) + .select2-container--bootstrap4:last-child > .selection > .select2-selection, .input-group > .select2-hidden-accessible:not(:first-child):not(:last-child) + .select2-container--bootstrap4:last-child > .selection > .select2-selection.form-control { border-top-left-radius: 0; border-bottom-left-radius: 0; }
|
||||
|
||||
.input-group > .select2-container--bootstrap4 { display: table; table-layout: fixed; position: relative; z-index: 2; width: 100%; margin-bottom: 0; }
|
||||
|
||||
.input-group > .select2-container--bootstrap4 > .selection > .select2-selection.form-control { float: none; }
|
||||
|
||||
.input-group > .select2-container--bootstrap4.select2-container--open, .input-group > .select2-container--bootstrap4.select2-container--focus { z-index: 3; }
|
||||
|
||||
.input-group > .select2-container--bootstrap4, .input-group > .select2-container--bootstrap4 .input-group-btn, .input-group > .select2-container--bootstrap4 .input-group-btn .btn { vertical-align: top; }
|
||||
|
||||
.form-control.select2-hidden-accessible { position: absolute !important; width: 1px !important; }
|
||||
|
||||
@media (min-width: 576px) { .form-inline .select2-container--bootstrap4 { display: inline-block; } }
|
||||
/* select2-bootstrap4 with Darkly */
|
||||
|
||||
.select2-container--bootstrap4 {
|
||||
color: black;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection {
|
||||
background-color: #fff;
|
||||
border: 1px solid #ced4da;
|
||||
border-radius: 0.25rem;
|
||||
color: #495057;
|
||||
font-size: 1rem;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection.form-control {
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-search--dropdown .select2-search__field {
|
||||
background-color: #fff;
|
||||
border: 1px solid #ced4da;
|
||||
border-radius: 0.25rem;
|
||||
color: #495057;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-search__field {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-search__field::-webkit-input-placeholder {
|
||||
color: #6c757d;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-search__field:-moz-placeholder {
|
||||
color: #6c757d;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-search__field::-moz-placeholder {
|
||||
color: #6c757d;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-search__field:-ms-input-placeholder {
|
||||
color: #6c757d;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option {
|
||||
padding: 0.75rem 0.375rem;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option[role=group] {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option[aria-disabled=true] {
|
||||
color: #6c757d;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option[aria-selected=true] {
|
||||
background-color: #f8f9fa;
|
||||
color: #16181b;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option--highlighted[aria-selected] {
|
||||
background-color: #007bff;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option {
|
||||
padding: 0.75rem 0.375rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__group {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option {
|
||||
margin-left: -0.375rem;
|
||||
padding-left: 0.75rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||
margin-left: -0.75rem;
|
||||
padding-left: 1.125rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||
margin-left: -1.125rem;
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||
margin-left: -1.5rem;
|
||||
padding-left: 1.875rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
|
||||
margin-left: -1.875rem;
|
||||
padding-left: 2.25rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results__group {
|
||||
color: #6c757d;
|
||||
display: block;
|
||||
padding: 0.75rem 0.375rem;
|
||||
font-size: 75%;
|
||||
line-height: 1;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4.select2-container--focus .select2-selection,
|
||||
.select2-container--bootstrap4.select2-container--open .select2-selection {
|
||||
transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
|
||||
border-color: #80bdff;
|
||||
}
|
||||
|
||||
@media screen and (prefers-reduced-motion: reduce) {
|
||||
.select2-container--bootstrap4.select2-container--focus .select2-selection,
|
||||
.select2-container--bootstrap4.select2-container--open .select2-selection {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4.select2-container--open .select2-selection .select2-selection__arrow b {
|
||||
border-color: transparent transparent #6c757d transparent;
|
||||
border-width: 0 0.25rem 0.25rem 0.25rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4.select2-container--open.select2-container--below .select2-selection {
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-color: transparent;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4.select2-container--open.select2-container--above .select2-selection {
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-top-color: transparent;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection__clear {
|
||||
color: #6c757d;
|
||||
cursor: pointer;
|
||||
float: right;
|
||||
font-weight: bold;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection__clear:hover {
|
||||
color: #343a40;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4.select2-container--disabled .select2-selection {
|
||||
border-color: #ced4da;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4.select2-container--disabled .select2-selection,
|
||||
.select2-container--bootstrap4.select2-container--disabled .select2-search__field {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4.select2-container--disabled .select2-selection,
|
||||
.select2-container--bootstrap4.select2-container--disabled .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: #e9ecef;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4.select2-container--disabled .select2-selection__clear,
|
||||
.select2-container--bootstrap4.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-dropdown {
|
||||
border-color: #80bdff;
|
||||
border-width: 1px;
|
||||
overflow-x: hidden;
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-dropdown--above {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-results>.select2-results__options {
|
||||
max-height: 200px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single {
|
||||
height: calc(2.25rem + 2px);
|
||||
line-height: 1;
|
||||
padding: 0.75rem 1.125rem 0.75rem 0.375rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0.375rem;
|
||||
top: 0;
|
||||
width: 0.25rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b {
|
||||
border-color: #6c757d transparent transparent transparent;
|
||||
border-style: solid;
|
||||
border-width: 0.25rem 0.25rem 0 0.25rem;
|
||||
height: 0;
|
||||
left: 0;
|
||||
margin-left: -0.25rem;
|
||||
margin-top: -0.125rem;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered {
|
||||
color: #495057;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single .select2-selection__placeholder {
|
||||
color: #6c757d;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple {
|
||||
min-height: calc(2.25rem + 2px);
|
||||
padding: 0;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__rendered {
|
||||
box-sizing: border-box;
|
||||
display: block;
|
||||
line-height: 1;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
padding: 0.75rem 0.375rem 0 0.75rem;
|
||||
width: 100%;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__placeholder {
|
||||
color: #6c757d;
|
||||
float: left;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice {
|
||||
color: #495057;
|
||||
background: transparent;
|
||||
border: 1px solid #343a40;
|
||||
border-radius: 0.25rem;
|
||||
cursor: default;
|
||||
float: left;
|
||||
margin: -0.25rem 0 0 0.1875rem;
|
||||
padding: 0 0.75rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field {
|
||||
background: transparent;
|
||||
padding: 0 0.375rem;
|
||||
height: calc(2.25rem + 2px)-2;
|
||||
line-height: 1;
|
||||
margin-top: 0;
|
||||
min-width: 5em;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice__remove {
|
||||
color: #6c757d;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-weight: bold;
|
||||
margin-right: 0.375rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice__remove:hover {
|
||||
color: #343a40;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear {
|
||||
margin-top: 0.75rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single.input-sm,
|
||||
.input-group-sm .select2-container--bootstrap4 .select2-selection--single,
|
||||
.form-group-sm .select2-container--bootstrap4 .select2-selection--single {
|
||||
border-radius: 0.2rem;
|
||||
font-size: 75%;
|
||||
height: calc(1.8125rem + 2px);
|
||||
line-height: 1;
|
||||
padding: 0.5rem 1rem 0.5rem 0.25rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single.input-sm .select2-selection__arrow b,
|
||||
.input-group-sm .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b,
|
||||
.form-group-sm .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b {
|
||||
margin-left: -0.5rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-sm,
|
||||
.input-group-sm .select2-container--bootstrap4 .select2-selection--multiple,
|
||||
.form-group-sm .select2-container--bootstrap4 .select2-selection--multiple {
|
||||
min-height: calc(1.8125rem + 2px);
|
||||
border-radius: 0.2rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-sm .select2-selection__rendered,
|
||||
.input-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__rendered,
|
||||
.form-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__rendered {
|
||||
padding: 0.5rem 0.25rem 0 0.5rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-sm .select2-selection__choice,
|
||||
.input-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice,
|
||||
.form-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice {
|
||||
font-size: 75%;
|
||||
line-height: 1;
|
||||
margin: 0 0 0 0.125rem;
|
||||
padding: 0 0.5rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-sm .select2-search--inline .select2-search__field,
|
||||
.input-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field,
|
||||
.form-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field {
|
||||
padding: 0 0.25rem;
|
||||
font-size: 75%;
|
||||
height: calc(1.8125rem + 2px)-2;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-sm .select2-selection__clear,
|
||||
.input-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear,
|
||||
.form-group-sm .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear {
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single.input-lg,
|
||||
.input-group-lg .select2-container--bootstrap4 .select2-selection--single,
|
||||
.form-group-lg .select2-container--bootstrap4 .select2-selection--single {
|
||||
border-radius: 0.3rem;
|
||||
font-size: 1.25rem;
|
||||
height: calc(2.875rem + 2px);
|
||||
line-height: 1;
|
||||
padding: 1rem 1.4375rem 1rem 0.5rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single.input-lg .select2-selection__arrow,
|
||||
.input-group-lg .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow,
|
||||
.form-group-lg .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow {
|
||||
width: 0.3125rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--single.input-lg .select2-selection__arrow b,
|
||||
.input-group-lg .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b,
|
||||
.form-group-lg .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b {
|
||||
border-width: 0.3125rem 0.3125rem 0 0.3125rem;
|
||||
margin-left: -0.3125rem;
|
||||
margin-left: -1rem;
|
||||
margin-top: -0.15625rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-lg,
|
||||
.input-group-lg .select2-container--bootstrap4 .select2-selection--multiple,
|
||||
.form-group-lg .select2-container--bootstrap4 .select2-selection--multiple {
|
||||
min-height: calc(2.875rem + 2px);
|
||||
border-radius: 0.3rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-lg .select2-selection__choice,
|
||||
.input-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice,
|
||||
.form-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice {
|
||||
font-size: 1.25rem;
|
||||
line-height: 1;
|
||||
border-radius: 0.25rem;
|
||||
margin: 0rem 0 0 0.25rem;
|
||||
padding: 0 1rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-lg .select2-search--inline .select2-search__field,
|
||||
.input-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field,
|
||||
.form-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-search--inline .select2-search__field {
|
||||
padding: 0 0.5rem;
|
||||
font-size: 1.25rem;
|
||||
height: calc(2.875rem + 2px)-2;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection--multiple.input-lg .select2-selection__clear,
|
||||
.input-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear,
|
||||
.form-group-lg .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4 .select2-selection.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
||||
border-color: transparent transparent #6c757d transparent;
|
||||
border-width: 0 0.3125rem 0.3125rem 0.3125rem;
|
||||
}
|
||||
|
||||
.input-group-lg .select2-container--bootstrap4 .select2-selection.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
||||
border-color: transparent transparent #6c757d transparent;
|
||||
border-width: 0 0.3125rem 0.3125rem 0.3125rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single {
|
||||
padding-left: 1.125rem;
|
||||
padding-right: 0.375rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single .select2-selection__rendered {
|
||||
padding-right: 0;
|
||||
padding-left: 0;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single .select2-selection__clear {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single .select2-selection__arrow {
|
||||
left: 0.375rem;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--single .select2-selection__arrow b {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-selection__choice,
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-search--inline {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
||||
margin-left: 0;
|
||||
margin-right: 0.1875rem;
|
||||
}
|
||||
|
||||
.select2-container--bootstrap4[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
|
||||
margin-left: 2px;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.has-warning .select2-dropdown,
|
||||
.has-warning .select2-selection {
|
||||
border-color: #ffc107;
|
||||
}
|
||||
|
||||
.has-warning .select2-container--focus .select2-selection,
|
||||
.has-warning .select2-container--open .select2-selection {
|
||||
border-color: #d39e00;
|
||||
}
|
||||
|
||||
.has-warning.select2-drop-active {
|
||||
border-color: #d39e00;
|
||||
}
|
||||
|
||||
.has-warning.select2-drop-active.select2-drop.select2-drop-above {
|
||||
border-top-color: #d39e00;
|
||||
}
|
||||
|
||||
.has-error .select2-dropdown,
|
||||
.has-error .select2-selection {
|
||||
border-color: #dc3545;
|
||||
}
|
||||
|
||||
.has-error .select2-container--focus .select2-selection,
|
||||
.has-error .select2-container--open .select2-selection {
|
||||
border-color: #bd2130;
|
||||
}
|
||||
|
||||
.has-error.select2-drop-active {
|
||||
border-color: #bd2130;
|
||||
}
|
||||
|
||||
.has-error.select2-drop-active.select2-drop.select2-drop-above {
|
||||
border-top-color: #bd2130;
|
||||
}
|
||||
|
||||
.has-success .select2-dropdown,
|
||||
.has-success .select2-selection {
|
||||
border-color: #28a745;
|
||||
}
|
||||
|
||||
.has-success .select2-container--focus .select2-selection,
|
||||
.has-success .select2-container--open .select2-selection {
|
||||
border-color: #1e7e34;
|
||||
}
|
||||
|
||||
.has-success.select2-drop-active {
|
||||
border-color: #1e7e34;
|
||||
}
|
||||
|
||||
.has-success.select2-drop-active.select2-drop.select2-drop-above {
|
||||
border-top-color: #1e7e34;
|
||||
}
|
||||
|
||||
.input-group>.select2-hidden-accessible:first-child+.select2-container--bootstrap4>.selection>.select2-selection,
|
||||
.input-group>.select2-hidden-accessible:first-child+.select2-container--bootstrap4>.selection>.select2-selection.form-control {
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.input-group>.select2-hidden-accessible:not(:first-child)+.select2-container--bootstrap4:not(:last-child)>.selection>.select2-selection,
|
||||
.input-group>.select2-hidden-accessible:not(:first-child)+.select2-container--bootstrap4:not(:last-child)>.selection>.select2-selection.form-control {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.input-group>.select2-hidden-accessible:not(:first-child):not(:last-child)+.select2-container--bootstrap4:last-child>.selection>.select2-selection,
|
||||
.input-group>.select2-hidden-accessible:not(:first-child):not(:last-child)+.select2-container--bootstrap4:last-child>.selection>.select2-selection.form-control {
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
|
||||
.input-group>.select2-container--bootstrap4 {
|
||||
display: table;
|
||||
table-layout: fixed;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
width: 100%;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.input-group>.select2-container--bootstrap4>.selection>.select2-selection.form-control {
|
||||
float: none;
|
||||
}
|
||||
|
||||
.input-group>.select2-container--bootstrap4.select2-container--open,
|
||||
.input-group>.select2-container--bootstrap4.select2-container--focus {
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
.input-group>.select2-container--bootstrap4,
|
||||
.input-group>.select2-container--bootstrap4 .input-group-btn,
|
||||
.input-group>.select2-container--bootstrap4 .input-group-btn .btn {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.form-control.select2-hidden-accessible {
|
||||
position: absolute !important;
|
||||
width: 1px !important;
|
||||
}
|
||||
|
||||
@media (min-width: 576px) {
|
||||
.form-inline .select2-container--bootstrap4 {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
Vendored
+8
-11
@@ -118,12 +118,14 @@
|
||||
.select2-hidden-accessible {
|
||||
border: 0 !important;
|
||||
clip: rect(0 0 0 0) !important;
|
||||
-webkit-clip-path: inset(50%) !important;
|
||||
clip-path: inset(50%) !important;
|
||||
height: 1px !important;
|
||||
margin: -1px !important;
|
||||
overflow: hidden !important;
|
||||
padding: 0 !important;
|
||||
position: absolute !important;
|
||||
width: 1px !important; }
|
||||
width: 1px !important;
|
||||
white-space: nowrap !important; }
|
||||
|
||||
.select2-container--default .select2-selection--single {
|
||||
background-color: #fff;
|
||||
@@ -186,16 +188,13 @@
|
||||
width: 100%; }
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__rendered li {
|
||||
list-style: none; }
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__placeholder {
|
||||
color: #999;
|
||||
margin-top: 5px;
|
||||
float: left; }
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__clear {
|
||||
cursor: pointer;
|
||||
float: right;
|
||||
font-weight: bold;
|
||||
margin-top: 5px;
|
||||
margin-right: 10px; }
|
||||
margin-right: 10px;
|
||||
padding: 1px; }
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: #e4e4e4;
|
||||
border: 1px solid #aaa;
|
||||
@@ -214,7 +213,7 @@
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
|
||||
color: #333; }
|
||||
|
||||
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
|
||||
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
|
||||
float: right; }
|
||||
|
||||
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
||||
@@ -420,9 +419,7 @@
|
||||
color: #555; }
|
||||
|
||||
.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
||||
float: right; }
|
||||
|
||||
.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
margin-right: auto; }
|
||||
|
||||
|
||||
Vendored
+583
-220
@@ -1,11 +1,11 @@
|
||||
/*!
|
||||
* Select2 4.0.5
|
||||
* Select2 4.0.13
|
||||
* https://select2.github.io
|
||||
*
|
||||
* Released under the MIT license
|
||||
* https://github.com/select2/select2/blob/master/LICENSE.md
|
||||
*/
|
||||
(function (factory) {
|
||||
;(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['jquery'], factory);
|
||||
@@ -574,10 +574,10 @@ S2.define('select2/utils',[
|
||||
DecoratedClass.prototype = new ctr();
|
||||
|
||||
for (var m = 0; m < superMethods.length; m++) {
|
||||
var superMethod = superMethods[m];
|
||||
var superMethod = superMethods[m];
|
||||
|
||||
DecoratedClass.prototype[superMethod] =
|
||||
SuperClass.prototype[superMethod];
|
||||
DecoratedClass.prototype[superMethod] =
|
||||
SuperClass.prototype[superMethod];
|
||||
}
|
||||
|
||||
var calledMethod = function (methodName) {
|
||||
@@ -772,6 +772,70 @@ S2.define('select2/utils',[
|
||||
$element.append($nodes);
|
||||
};
|
||||
|
||||
// Cache objects in Utils.__cache instead of $.data (see #4346)
|
||||
Utils.__cache = {};
|
||||
|
||||
var id = 0;
|
||||
Utils.GetUniqueElementId = function (element) {
|
||||
// Get a unique element Id. If element has no id,
|
||||
// creates a new unique number, stores it in the id
|
||||
// attribute and returns the new id.
|
||||
// If an id already exists, it simply returns it.
|
||||
|
||||
var select2Id = element.getAttribute('data-select2-id');
|
||||
if (select2Id == null) {
|
||||
// If element has id, use it.
|
||||
if (element.id) {
|
||||
select2Id = element.id;
|
||||
element.setAttribute('data-select2-id', select2Id);
|
||||
} else {
|
||||
element.setAttribute('data-select2-id', ++id);
|
||||
select2Id = id.toString();
|
||||
}
|
||||
}
|
||||
return select2Id;
|
||||
};
|
||||
|
||||
Utils.StoreData = function (element, name, value) {
|
||||
// Stores an item in the cache for a specified element.
|
||||
// name is the cache key.
|
||||
var id = Utils.GetUniqueElementId(element);
|
||||
if (!Utils.__cache[id]) {
|
||||
Utils.__cache[id] = {};
|
||||
}
|
||||
|
||||
Utils.__cache[id][name] = value;
|
||||
};
|
||||
|
||||
Utils.GetData = function (element, name) {
|
||||
// Retrieves a value from the cache by its key (name)
|
||||
// name is optional. If no name specified, return
|
||||
// all cache items for the specified element.
|
||||
// and for a specified element.
|
||||
var id = Utils.GetUniqueElementId(element);
|
||||
if (name) {
|
||||
if (Utils.__cache[id]) {
|
||||
if (Utils.__cache[id][name] != null) {
|
||||
return Utils.__cache[id][name];
|
||||
}
|
||||
return $(element).data(name); // Fallback to HTML5 data attribs.
|
||||
}
|
||||
return $(element).data(name); // Fallback to HTML5 data attribs.
|
||||
} else {
|
||||
return Utils.__cache[id];
|
||||
}
|
||||
};
|
||||
|
||||
Utils.RemoveData = function (element) {
|
||||
// Removes all cached items for a specified element.
|
||||
var id = Utils.GetUniqueElementId(element);
|
||||
if (Utils.__cache[id] != null) {
|
||||
delete Utils.__cache[id];
|
||||
}
|
||||
|
||||
element.removeAttribute('data-select2-id');
|
||||
};
|
||||
|
||||
return Utils;
|
||||
});
|
||||
|
||||
@@ -791,7 +855,7 @@ S2.define('select2/results',[
|
||||
|
||||
Results.prototype.render = function () {
|
||||
var $results = $(
|
||||
'<ul class="select2-results__options" role="tree"></ul>'
|
||||
'<ul class="select2-results__options" role="listbox"></ul>'
|
||||
);
|
||||
|
||||
if (this.options.get('multiple')) {
|
||||
@@ -814,7 +878,7 @@ S2.define('select2/results',[
|
||||
this.hideLoading();
|
||||
|
||||
var $message = $(
|
||||
'<li role="treeitem" aria-live="assertive"' +
|
||||
'<li role="alert" aria-live="assertive"' +
|
||||
' class="select2-results__option"></li>'
|
||||
);
|
||||
|
||||
@@ -907,7 +971,7 @@ S2.define('select2/results',[
|
||||
$options.each(function () {
|
||||
var $option = $(this);
|
||||
|
||||
var item = $.data(this, 'data');
|
||||
var item = Utils.GetData(this, 'data');
|
||||
|
||||
// id needs to be converted to a string when comparing
|
||||
var id = '' + item.id;
|
||||
@@ -948,11 +1012,16 @@ S2.define('select2/results',[
|
||||
option.className = 'select2-results__option';
|
||||
|
||||
var attrs = {
|
||||
'role': 'treeitem',
|
||||
'role': 'option',
|
||||
'aria-selected': 'false'
|
||||
};
|
||||
|
||||
if (data.disabled) {
|
||||
var matches = window.Element.prototype.matches ||
|
||||
window.Element.prototype.msMatchesSelector ||
|
||||
window.Element.prototype.webkitMatchesSelector;
|
||||
|
||||
if ((data.element != null && matches.call(data.element, ':disabled')) ||
|
||||
(data.element == null && data.disabled)) {
|
||||
delete attrs['aria-selected'];
|
||||
attrs['aria-disabled'] = 'true';
|
||||
}
|
||||
@@ -1012,7 +1081,7 @@ S2.define('select2/results',[
|
||||
this.template(data, option);
|
||||
}
|
||||
|
||||
$.data(option, 'data', data);
|
||||
Utils.StoreData(option, 'data', data);
|
||||
|
||||
return option;
|
||||
};
|
||||
@@ -1053,7 +1122,10 @@ S2.define('select2/results',[
|
||||
}
|
||||
|
||||
self.setClasses();
|
||||
self.highlightFirstItem();
|
||||
|
||||
if (self.options.get('scrollAfterSelect')) {
|
||||
self.highlightFirstItem();
|
||||
}
|
||||
});
|
||||
|
||||
container.on('unselect', function () {
|
||||
@@ -1062,7 +1134,10 @@ S2.define('select2/results',[
|
||||
}
|
||||
|
||||
self.setClasses();
|
||||
self.highlightFirstItem();
|
||||
|
||||
if (self.options.get('scrollAfterSelect')) {
|
||||
self.highlightFirstItem();
|
||||
}
|
||||
});
|
||||
|
||||
container.on('open', function () {
|
||||
@@ -1098,7 +1173,7 @@ S2.define('select2/results',[
|
||||
return;
|
||||
}
|
||||
|
||||
var data = $highlighted.data('data');
|
||||
var data = Utils.GetData($highlighted[0], 'data');
|
||||
|
||||
if ($highlighted.attr('aria-selected') == 'true') {
|
||||
self.trigger('close', {});
|
||||
@@ -1116,8 +1191,9 @@ S2.define('select2/results',[
|
||||
|
||||
var currentIndex = $options.index($highlighted);
|
||||
|
||||
// If we are already at te top, don't move further
|
||||
if (currentIndex === 0) {
|
||||
// If we are already at the top, don't move further
|
||||
// If no options, currentIndex will be -1
|
||||
if (currentIndex <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1210,7 +1286,7 @@ S2.define('select2/results',[
|
||||
function (evt) {
|
||||
var $this = $(this);
|
||||
|
||||
var data = $this.data('data');
|
||||
var data = Utils.GetData(this, 'data');
|
||||
|
||||
if ($this.attr('aria-selected') === 'true') {
|
||||
if (self.options.get('multiple')) {
|
||||
@@ -1233,7 +1309,7 @@ S2.define('select2/results',[
|
||||
|
||||
this.$results.on('mouseenter', '.select2-results__option[aria-selected]',
|
||||
function (evt) {
|
||||
var data = $(this).data('data');
|
||||
var data = Utils.GetData(this, 'data');
|
||||
|
||||
self.getHighlightedResults()
|
||||
.removeClass('select2-results__option--highlighted');
|
||||
@@ -1348,14 +1424,15 @@ S2.define('select2/selection/base',[
|
||||
|
||||
this._tabindex = 0;
|
||||
|
||||
if (this.$element.data('old-tabindex') != null) {
|
||||
this._tabindex = this.$element.data('old-tabindex');
|
||||
if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {
|
||||
this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');
|
||||
} else if (this.$element.attr('tabindex') != null) {
|
||||
this._tabindex = this.$element.attr('tabindex');
|
||||
}
|
||||
|
||||
$selection.attr('title', this.$element.attr('title'));
|
||||
$selection.attr('tabindex', this._tabindex);
|
||||
$selection.attr('aria-disabled', 'false');
|
||||
|
||||
this.$selection = $selection;
|
||||
|
||||
@@ -1365,7 +1442,6 @@ S2.define('select2/selection/base',[
|
||||
BaseSelection.prototype.bind = function (container, $container) {
|
||||
var self = this;
|
||||
|
||||
var id = container.id + '-container';
|
||||
var resultsId = container.id + '-results';
|
||||
|
||||
this.container = container;
|
||||
@@ -1408,17 +1484,19 @@ S2.define('select2/selection/base',[
|
||||
self.$selection.removeAttr('aria-activedescendant');
|
||||
self.$selection.removeAttr('aria-owns');
|
||||
|
||||
self.$selection.focus();
|
||||
self.$selection.trigger('focus');
|
||||
|
||||
self._detachCloseHandler(container);
|
||||
});
|
||||
|
||||
container.on('enable', function () {
|
||||
self.$selection.attr('tabindex', self._tabindex);
|
||||
self.$selection.attr('aria-disabled', 'false');
|
||||
});
|
||||
|
||||
container.on('disable', function () {
|
||||
self.$selection.attr('tabindex', '-1');
|
||||
self.$selection.attr('aria-disabled', 'true');
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1441,7 +1519,6 @@ S2.define('select2/selection/base',[
|
||||
};
|
||||
|
||||
BaseSelection.prototype._attachCloseHandler = function (container) {
|
||||
var self = this;
|
||||
|
||||
$(document.body).on('mousedown.select2.' + container.id, function (e) {
|
||||
var $target = $(e.target);
|
||||
@@ -1451,13 +1528,11 @@ S2.define('select2/selection/base',[
|
||||
var $all = $('.select2.select2-container--open');
|
||||
|
||||
$all.each(function () {
|
||||
var $this = $(this);
|
||||
|
||||
if (this == $select[0]) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $element = $this.data('element');
|
||||
var $element = Utils.GetData(this, 'element');
|
||||
|
||||
$element.select2('close');
|
||||
});
|
||||
@@ -1481,6 +1556,27 @@ S2.define('select2/selection/base',[
|
||||
throw new Error('The `update` method must be defined in child classes.');
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper method to abstract the "enabled" (not "disabled") state of this
|
||||
* object.
|
||||
*
|
||||
* @return {true} if the instance is not disabled.
|
||||
* @return {false} if the instance is disabled.
|
||||
*/
|
||||
BaseSelection.prototype.isEnabled = function () {
|
||||
return !this.isDisabled();
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper method to abstract the "disabled" state of this object.
|
||||
*
|
||||
* @return {true} if the disabled option is true.
|
||||
* @return {false} if the disabled option is false.
|
||||
*/
|
||||
BaseSelection.prototype.isDisabled = function () {
|
||||
return this.options.get('disabled');
|
||||
};
|
||||
|
||||
return BaseSelection;
|
||||
});
|
||||
|
||||
@@ -1518,7 +1614,10 @@ S2.define('select2/selection/single',[
|
||||
|
||||
var id = container.id + '-container';
|
||||
|
||||
this.$selection.find('.select2-selection__rendered').attr('id', id);
|
||||
this.$selection.find('.select2-selection__rendered')
|
||||
.attr('id', id)
|
||||
.attr('role', 'textbox')
|
||||
.attr('aria-readonly', 'true');
|
||||
this.$selection.attr('aria-labelledby', id);
|
||||
|
||||
this.$selection.on('mousedown', function (evt) {
|
||||
@@ -1542,17 +1641,15 @@ S2.define('select2/selection/single',[
|
||||
|
||||
container.on('focus', function (evt) {
|
||||
if (!container.isOpen()) {
|
||||
self.$selection.focus();
|
||||
self.$selection.trigger('focus');
|
||||
}
|
||||
});
|
||||
|
||||
container.on('selection:update', function (params) {
|
||||
self.update(params.data);
|
||||
});
|
||||
};
|
||||
|
||||
SingleSelection.prototype.clear = function () {
|
||||
this.$selection.find('.select2-selection__rendered').empty();
|
||||
var $rendered = this.$selection.find('.select2-selection__rendered');
|
||||
$rendered.empty();
|
||||
$rendered.removeAttr('title'); // clear tooltip on empty
|
||||
};
|
||||
|
||||
SingleSelection.prototype.display = function (data, container) {
|
||||
@@ -1578,7 +1675,14 @@ S2.define('select2/selection/single',[
|
||||
var formatted = this.display(selection, $rendered);
|
||||
|
||||
$rendered.empty().append(formatted);
|
||||
$rendered.prop('title', selection.title || selection.text);
|
||||
|
||||
var title = selection.title || selection.text;
|
||||
|
||||
if (title) {
|
||||
$rendered.attr('title', title);
|
||||
} else {
|
||||
$rendered.removeAttr('title');
|
||||
}
|
||||
};
|
||||
|
||||
return SingleSelection;
|
||||
@@ -1623,14 +1727,14 @@ S2.define('select2/selection/multiple',[
|
||||
'.select2-selection__choice__remove',
|
||||
function (evt) {
|
||||
// Ignore the event if it is disabled
|
||||
if (self.options.get('disabled')) {
|
||||
if (self.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $remove = $(this);
|
||||
var $selection = $remove.parent();
|
||||
|
||||
var data = $selection.data('data');
|
||||
var data = Utils.GetData($selection[0], 'data');
|
||||
|
||||
self.trigger('unselect', {
|
||||
originalEvent: evt,
|
||||
@@ -1641,7 +1745,9 @@ S2.define('select2/selection/multiple',[
|
||||
};
|
||||
|
||||
MultipleSelection.prototype.clear = function () {
|
||||
this.$selection.find('.select2-selection__rendered').empty();
|
||||
var $rendered = this.$selection.find('.select2-selection__rendered');
|
||||
$rendered.empty();
|
||||
$rendered.removeAttr('title');
|
||||
};
|
||||
|
||||
MultipleSelection.prototype.display = function (data, container) {
|
||||
@@ -1679,9 +1785,14 @@ S2.define('select2/selection/multiple',[
|
||||
var formatted = this.display(selection, $selection);
|
||||
|
||||
$selection.append(formatted);
|
||||
$selection.prop('title', selection.title || selection.text);
|
||||
|
||||
$selection.data('data', selection);
|
||||
var title = selection.title || selection.text;
|
||||
|
||||
if (title) {
|
||||
$selection.attr('title', title);
|
||||
}
|
||||
|
||||
Utils.StoreData($selection[0], 'data', selection);
|
||||
|
||||
$selections.push($selection);
|
||||
}
|
||||
@@ -1746,8 +1857,9 @@ S2.define('select2/selection/placeholder',[
|
||||
|
||||
S2.define('select2/selection/allowClear',[
|
||||
'jquery',
|
||||
'../keys'
|
||||
], function ($, KEYS) {
|
||||
'../keys',
|
||||
'../utils'
|
||||
], function ($, KEYS, Utils) {
|
||||
function AllowClear () { }
|
||||
|
||||
AllowClear.prototype.bind = function (decorated, container, $container) {
|
||||
@@ -1776,7 +1888,7 @@ S2.define('select2/selection/allowClear',[
|
||||
|
||||
AllowClear.prototype._handleClear = function (_, evt) {
|
||||
// Ignore the event if it is disabled
|
||||
if (this.options.get('disabled')) {
|
||||
if (this.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1789,10 +1901,22 @@ S2.define('select2/selection/allowClear',[
|
||||
|
||||
evt.stopPropagation();
|
||||
|
||||
var data = $clear.data('data');
|
||||
var data = Utils.GetData($clear[0], 'data');
|
||||
|
||||
var previousVal = this.$element.val();
|
||||
this.$element.val(this.placeholder.id);
|
||||
|
||||
var unselectData = {
|
||||
data: data
|
||||
};
|
||||
this.trigger('clear', unselectData);
|
||||
if (unselectData.prevented) {
|
||||
this.$element.val(previousVal);
|
||||
return;
|
||||
}
|
||||
|
||||
for (var d = 0; d < data.length; d++) {
|
||||
var unselectData = {
|
||||
unselectData = {
|
||||
data: data[d]
|
||||
};
|
||||
|
||||
@@ -1802,11 +1926,12 @@ S2.define('select2/selection/allowClear',[
|
||||
|
||||
// If the event was prevented, don't clear it out.
|
||||
if (unselectData.prevented) {
|
||||
this.$element.val(previousVal);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
this.$element.val(this.placeholder.id).trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
|
||||
this.trigger('toggle', {});
|
||||
};
|
||||
@@ -1829,12 +1954,14 @@ S2.define('select2/selection/allowClear',[
|
||||
return;
|
||||
}
|
||||
|
||||
var removeAll = this.options.get('translations').get('removeAllItems');
|
||||
|
||||
var $remove = $(
|
||||
'<span class="select2-selection__clear">' +
|
||||
'<span class="select2-selection__clear" title="' + removeAll() +'">' +
|
||||
'×' +
|
||||
'</span>'
|
||||
);
|
||||
$remove.data('data', data);
|
||||
Utils.StoreData($remove[0], 'data', data);
|
||||
|
||||
this.$selection.find('.select2-selection__rendered').prepend($remove);
|
||||
};
|
||||
@@ -1856,7 +1983,7 @@ S2.define('select2/selection/search',[
|
||||
'<li class="select2-search select2-search--inline">' +
|
||||
'<input class="select2-search__field" type="search" tabindex="-1"' +
|
||||
' autocomplete="off" autocorrect="off" autocapitalize="none"' +
|
||||
' spellcheck="false" role="textbox" aria-autocomplete="list" />' +
|
||||
' spellcheck="false" role="searchbox" aria-autocomplete="list" />' +
|
||||
'</li>'
|
||||
);
|
||||
|
||||
@@ -1873,14 +2000,18 @@ S2.define('select2/selection/search',[
|
||||
Search.prototype.bind = function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
var resultsId = container.id + '-results';
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
container.on('open', function () {
|
||||
self.$search.attr('aria-controls', resultsId);
|
||||
self.$search.trigger('focus');
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
self.$search.val('');
|
||||
self.$search.removeAttr('aria-controls');
|
||||
self.$search.removeAttr('aria-activedescendant');
|
||||
self.$search.trigger('focus');
|
||||
});
|
||||
@@ -1900,7 +2031,11 @@ S2.define('select2/selection/search',[
|
||||
});
|
||||
|
||||
container.on('results:focus', function (params) {
|
||||
self.$search.attr('aria-activedescendant', params.id);
|
||||
if (params.data._resultId) {
|
||||
self.$search.attr('aria-activedescendant', params.data._resultId);
|
||||
} else {
|
||||
self.$search.removeAttr('aria-activedescendant');
|
||||
}
|
||||
});
|
||||
|
||||
this.$selection.on('focusin', '.select2-search--inline', function (evt) {
|
||||
@@ -1925,7 +2060,7 @@ S2.define('select2/selection/search',[
|
||||
.prev('.select2-selection__choice');
|
||||
|
||||
if ($previousChoice.length > 0) {
|
||||
var item = $previousChoice.data('data');
|
||||
var item = Utils.GetData($previousChoice[0], 'data');
|
||||
|
||||
self.searchRemoveChoice(item);
|
||||
|
||||
@@ -1934,6 +2069,12 @@ S2.define('select2/selection/search',[
|
||||
}
|
||||
});
|
||||
|
||||
this.$selection.on('click', '.select2-search--inline', function (evt) {
|
||||
if (self.$search.val()) {
|
||||
evt.stopPropagation();
|
||||
}
|
||||
});
|
||||
|
||||
// Try to detect the IE version should the `documentMode` property that
|
||||
// is stored on the document. This is only implemented in IE and is
|
||||
// slightly cleaner than doing a user agent check.
|
||||
@@ -2019,7 +2160,7 @@ S2.define('select2/selection/search',[
|
||||
|
||||
this.resizeSearch();
|
||||
if (searchHadFocus) {
|
||||
this.$search.focus();
|
||||
this.$search.trigger('focus');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -2052,7 +2193,7 @@ S2.define('select2/selection/search',[
|
||||
var width = '';
|
||||
|
||||
if (this.$search.attr('placeholder') !== '') {
|
||||
width = this.$selection.find('.select2-selection__rendered').innerWidth();
|
||||
width = this.$selection.find('.select2-selection__rendered').width();
|
||||
} else {
|
||||
var minimumWidth = this.$search.val().length + 1;
|
||||
|
||||
@@ -2076,10 +2217,13 @@ S2.define('select2/selection/eventRelay',[
|
||||
'open', 'opening',
|
||||
'close', 'closing',
|
||||
'select', 'selecting',
|
||||
'unselect', 'unselecting'
|
||||
'unselect', 'unselecting',
|
||||
'clear', 'clearing'
|
||||
];
|
||||
|
||||
var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting'];
|
||||
var preventableEvents = [
|
||||
'opening', 'closing', 'selecting', 'unselecting', 'clearing'
|
||||
];
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
@@ -2412,6 +2556,7 @@ S2.define('select2/diacritics',[
|
||||
'\u019F': 'O',
|
||||
'\uA74A': 'O',
|
||||
'\uA74C': 'O',
|
||||
'\u0152': 'OE',
|
||||
'\u01A2': 'OI',
|
||||
'\uA74E': 'OO',
|
||||
'\u0222': 'OU',
|
||||
@@ -2821,6 +2966,7 @@ S2.define('select2/diacritics',[
|
||||
'\uA74B': 'o',
|
||||
'\uA74D': 'o',
|
||||
'\u0275': 'o',
|
||||
'\u0153': 'oe',
|
||||
'\u01A3': 'oi',
|
||||
'\u0223': 'ou',
|
||||
'\uA74F': 'oo',
|
||||
@@ -2989,8 +3135,9 @@ S2.define('select2/diacritics',[
|
||||
'\u03CD': '\u03C5',
|
||||
'\u03CB': '\u03C5',
|
||||
'\u03B0': '\u03C5',
|
||||
'\u03C9': '\u03C9',
|
||||
'\u03C2': '\u03C3'
|
||||
'\u03CE': '\u03C9',
|
||||
'\u03C2': '\u03C3',
|
||||
'\u2019': '\''
|
||||
};
|
||||
|
||||
return diacritics;
|
||||
@@ -3075,7 +3222,7 @@ S2.define('select2/data/select',[
|
||||
if ($(data.element).is('option')) {
|
||||
data.element.selected = true;
|
||||
|
||||
this.$element.trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -3096,13 +3243,13 @@ S2.define('select2/data/select',[
|
||||
}
|
||||
|
||||
self.$element.val(val);
|
||||
self.$element.trigger('change');
|
||||
self.$element.trigger('input').trigger('change');
|
||||
});
|
||||
} else {
|
||||
var val = data.id;
|
||||
|
||||
this.$element.val(val);
|
||||
this.$element.trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -3118,7 +3265,7 @@ S2.define('select2/data/select',[
|
||||
if ($(data.element).is('option')) {
|
||||
data.element.selected = false;
|
||||
|
||||
this.$element.trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -3136,7 +3283,7 @@ S2.define('select2/data/select',[
|
||||
|
||||
self.$element.val(val);
|
||||
|
||||
self.$element.trigger('change');
|
||||
self.$element.trigger('input').trigger('change');
|
||||
});
|
||||
};
|
||||
|
||||
@@ -3158,7 +3305,7 @@ S2.define('select2/data/select',[
|
||||
// Remove anything added to child elements
|
||||
this.$element.find('*').each(function () {
|
||||
// Remove any custom data set by Select2
|
||||
$.removeData(this, 'data');
|
||||
Utils.RemoveData(this);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -3231,7 +3378,7 @@ S2.define('select2/data/select',[
|
||||
normalizedData.element = option;
|
||||
|
||||
// Override the option's data with the combined data
|
||||
$.data(option, 'data', normalizedData);
|
||||
Utils.StoreData(option, 'data', normalizedData);
|
||||
|
||||
return $option;
|
||||
};
|
||||
@@ -3239,7 +3386,7 @@ S2.define('select2/data/select',[
|
||||
SelectAdapter.prototype.item = function ($option) {
|
||||
var data = {};
|
||||
|
||||
data = $.data($option[0], 'data');
|
||||
data = Utils.GetData($option[0], 'data');
|
||||
|
||||
if (data != null) {
|
||||
return data;
|
||||
@@ -3277,13 +3424,13 @@ S2.define('select2/data/select',[
|
||||
data = this._normalizeItem(data);
|
||||
data.element = $option[0];
|
||||
|
||||
$.data($option[0], 'data', data);
|
||||
Utils.StoreData($option[0], 'data', data);
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
SelectAdapter.prototype._normalizeItem = function (item) {
|
||||
if (!$.isPlainObject(item)) {
|
||||
if (item !== Object(item)) {
|
||||
item = {
|
||||
id: item,
|
||||
text: item
|
||||
@@ -3329,15 +3476,19 @@ S2.define('select2/data/array',[
|
||||
'jquery'
|
||||
], function (SelectAdapter, Utils, $) {
|
||||
function ArrayAdapter ($element, options) {
|
||||
var data = options.get('data') || [];
|
||||
this._dataToConvert = options.get('data') || [];
|
||||
|
||||
ArrayAdapter.__super__.constructor.call(this, $element, options);
|
||||
|
||||
this.addOptions(this.convertToOptions(data));
|
||||
}
|
||||
|
||||
Utils.Extend(ArrayAdapter, SelectAdapter);
|
||||
|
||||
ArrayAdapter.prototype.bind = function (container, $container) {
|
||||
ArrayAdapter.__super__.bind.call(this, container, $container);
|
||||
|
||||
this.addOptions(this.convertToOptions(this._dataToConvert));
|
||||
};
|
||||
|
||||
ArrayAdapter.prototype.select = function (data) {
|
||||
var $option = this.$element.find('option').filter(function (i, elm) {
|
||||
return elm.value == data.id.toString();
|
||||
@@ -3487,7 +3638,8 @@ S2.define('select2/data/ajax',[
|
||||
}, function () {
|
||||
// Attempt to detect if a request was aborted
|
||||
// Only works if the transport exposes a status property
|
||||
if ($request.status && $request.status === '0') {
|
||||
if ('status' in $request &&
|
||||
($request.status === 0 || $request.status === '0')) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -3626,8 +3778,6 @@ S2.define('select2/data/tags',[
|
||||
};
|
||||
|
||||
Tags.prototype._removeOldTags = function (_) {
|
||||
var tag = this._lastTag;
|
||||
|
||||
var $options = this.$element.find('option[data-select2-tag]');
|
||||
|
||||
$options.each(function () {
|
||||
@@ -3702,7 +3852,7 @@ S2.define('select2/data/tokenizer',[
|
||||
// Replace the search term if we have the search box
|
||||
if (this.$search.length) {
|
||||
this.$search.val(tokenData.term);
|
||||
this.$search.focus();
|
||||
this.$search.trigger('focus');
|
||||
}
|
||||
|
||||
params.term = tokenData.term;
|
||||
@@ -3831,10 +3981,30 @@ S2.define('select2/data/maximumSelectionLength',[
|
||||
decorated.call(this, $e, options);
|
||||
}
|
||||
|
||||
MaximumSelectionLength.prototype.bind =
|
||||
function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
container.on('select', function () {
|
||||
self._checkIfMaximumSelected();
|
||||
});
|
||||
};
|
||||
|
||||
MaximumSelectionLength.prototype.query =
|
||||
function (decorated, params, callback) {
|
||||
var self = this;
|
||||
|
||||
this._checkIfMaximumSelected(function () {
|
||||
decorated.call(self, params, callback);
|
||||
});
|
||||
};
|
||||
|
||||
MaximumSelectionLength.prototype._checkIfMaximumSelected =
|
||||
function (_, successCallback) {
|
||||
var self = this;
|
||||
|
||||
this.current(function (currentData) {
|
||||
var count = currentData != null ? currentData.length : 0;
|
||||
if (self.maximumSelectionLength > 0 &&
|
||||
@@ -3847,7 +4017,10 @@ S2.define('select2/data/maximumSelectionLength',[
|
||||
});
|
||||
return;
|
||||
}
|
||||
decorated.call(self, params, callback);
|
||||
|
||||
if (successCallback) {
|
||||
successCallback();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -3886,7 +4059,7 @@ S2.define('select2/dropdown',[
|
||||
};
|
||||
|
||||
Dropdown.prototype.position = function ($dropdown, $container) {
|
||||
// Should be implmented in subclasses
|
||||
// Should be implemented in subclasses
|
||||
};
|
||||
|
||||
Dropdown.prototype.destroy = function () {
|
||||
@@ -3910,7 +4083,7 @@ S2.define('select2/dropdown/search',[
|
||||
'<span class="select2-search select2-search--dropdown">' +
|
||||
'<input class="select2-search__field" type="search" tabindex="-1"' +
|
||||
' autocomplete="off" autocorrect="off" autocapitalize="none"' +
|
||||
' spellcheck="false" role="textbox" />' +
|
||||
' spellcheck="false" role="searchbox" aria-autocomplete="list" />' +
|
||||
'</span>'
|
||||
);
|
||||
|
||||
@@ -3925,6 +4098,8 @@ S2.define('select2/dropdown/search',[
|
||||
Search.prototype.bind = function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
var resultsId = container.id + '-results';
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
this.$search.on('keydown', function (evt) {
|
||||
@@ -3947,23 +4122,27 @@ S2.define('select2/dropdown/search',[
|
||||
|
||||
container.on('open', function () {
|
||||
self.$search.attr('tabindex', 0);
|
||||
self.$search.attr('aria-controls', resultsId);
|
||||
|
||||
self.$search.focus();
|
||||
self.$search.trigger('focus');
|
||||
|
||||
window.setTimeout(function () {
|
||||
self.$search.focus();
|
||||
self.$search.trigger('focus');
|
||||
}, 0);
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
self.$search.attr('tabindex', -1);
|
||||
self.$search.removeAttr('aria-controls');
|
||||
self.$search.removeAttr('aria-activedescendant');
|
||||
|
||||
self.$search.val('');
|
||||
self.$search.trigger('blur');
|
||||
});
|
||||
|
||||
container.on('focus', function () {
|
||||
if (!container.isOpen()) {
|
||||
self.$search.focus();
|
||||
self.$search.trigger('focus');
|
||||
}
|
||||
});
|
||||
|
||||
@@ -3978,6 +4157,14 @@ S2.define('select2/dropdown/search',[
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
container.on('results:focus', function (params) {
|
||||
if (params.data._resultId) {
|
||||
self.$search.attr('aria-activedescendant', params.data._resultId);
|
||||
} else {
|
||||
self.$search.removeAttr('aria-activedescendant');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Search.prototype.handleSearch = function (evt) {
|
||||
@@ -4062,6 +4249,7 @@ S2.define('select2/dropdown/infiniteScroll',[
|
||||
|
||||
if (this.showLoadingMore(data)) {
|
||||
this.$results.append(this.$loadingMore);
|
||||
this.loadMoreIfNeeded();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -4080,25 +4268,27 @@ S2.define('select2/dropdown/infiniteScroll',[
|
||||
self.loading = true;
|
||||
});
|
||||
|
||||
this.$results.on('scroll', function () {
|
||||
var isLoadMoreVisible = $.contains(
|
||||
document.documentElement,
|
||||
self.$loadingMore[0]
|
||||
);
|
||||
this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));
|
||||
};
|
||||
|
||||
if (self.loading || !isLoadMoreVisible) {
|
||||
return;
|
||||
}
|
||||
InfiniteScroll.prototype.loadMoreIfNeeded = function () {
|
||||
var isLoadMoreVisible = $.contains(
|
||||
document.documentElement,
|
||||
this.$loadingMore[0]
|
||||
);
|
||||
|
||||
var currentOffset = self.$results.offset().top +
|
||||
self.$results.outerHeight(false);
|
||||
var loadingMoreOffset = self.$loadingMore.offset().top +
|
||||
self.$loadingMore.outerHeight(false);
|
||||
if (this.loading || !isLoadMoreVisible) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentOffset + 50 >= loadingMoreOffset) {
|
||||
self.loadMore();
|
||||
}
|
||||
});
|
||||
var currentOffset = this.$results.offset().top +
|
||||
this.$results.outerHeight(false);
|
||||
var loadingMoreOffset = this.$loadingMore.offset().top +
|
||||
this.$loadingMore.outerHeight(false);
|
||||
|
||||
if (currentOffset + 50 >= loadingMoreOffset) {
|
||||
this.loadMore();
|
||||
}
|
||||
};
|
||||
|
||||
InfiniteScroll.prototype.loadMore = function () {
|
||||
@@ -4119,7 +4309,7 @@ S2.define('select2/dropdown/infiniteScroll',[
|
||||
var $option = $(
|
||||
'<li ' +
|
||||
'class="select2-results__option select2-results__option--load-more"' +
|
||||
'role="treeitem" aria-disabled="true"></li>'
|
||||
'role="option" aria-disabled="true"></li>'
|
||||
);
|
||||
|
||||
var message = this.options.get('translations').get('loadingMore');
|
||||
@@ -4137,7 +4327,7 @@ S2.define('select2/dropdown/attachBody',[
|
||||
'../utils'
|
||||
], function ($, Utils) {
|
||||
function AttachBody (decorated, $element, options) {
|
||||
this.$dropdownParent = options.get('dropdownParent') || $(document.body);
|
||||
this.$dropdownParent = $(options.get('dropdownParent') || document.body);
|
||||
|
||||
decorated.call(this, $element, options);
|
||||
}
|
||||
@@ -4145,27 +4335,14 @@ S2.define('select2/dropdown/attachBody',[
|
||||
AttachBody.prototype.bind = function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
var setupResultsEvents = false;
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
container.on('open', function () {
|
||||
self._showDropdown();
|
||||
self._attachPositioningHandler(container);
|
||||
|
||||
if (!setupResultsEvents) {
|
||||
setupResultsEvents = true;
|
||||
|
||||
container.on('results:all', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('results:append', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
}
|
||||
// Must bind after the results handlers to ensure correct sizing
|
||||
self._bindContainerResultHandlers(container);
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
@@ -4214,6 +4391,44 @@ S2.define('select2/dropdown/attachBody',[
|
||||
this.$dropdownContainer.detach();
|
||||
};
|
||||
|
||||
AttachBody.prototype._bindContainerResultHandlers =
|
||||
function (decorated, container) {
|
||||
|
||||
// These should only be bound once
|
||||
if (this._containerResultsHandlersBound) {
|
||||
return;
|
||||
}
|
||||
|
||||
var self = this;
|
||||
|
||||
container.on('results:all', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('results:append', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('results:message', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('select', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('unselect', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
this._containerResultsHandlersBound = true;
|
||||
};
|
||||
|
||||
AttachBody.prototype._attachPositioningHandler =
|
||||
function (decorated, container) {
|
||||
var self = this;
|
||||
@@ -4224,14 +4439,14 @@ S2.define('select2/dropdown/attachBody',[
|
||||
|
||||
var $watchers = this.$container.parents().filter(Utils.hasScroll);
|
||||
$watchers.each(function () {
|
||||
$(this).data('select2-scroll-position', {
|
||||
Utils.StoreData(this, 'select2-scroll-position', {
|
||||
x: $(this).scrollLeft(),
|
||||
y: $(this).scrollTop()
|
||||
});
|
||||
});
|
||||
|
||||
$watchers.on(scrollEvent, function (ev) {
|
||||
var position = $(this).data('select2-scroll-position');
|
||||
var position = Utils.GetData(this, 'select2-scroll-position');
|
||||
$(this).scrollTop(position.y);
|
||||
});
|
||||
|
||||
@@ -4290,16 +4505,26 @@ S2.define('select2/dropdown/attachBody',[
|
||||
top: container.bottom
|
||||
};
|
||||
|
||||
// Determine what the parent element is to use for calciulating the offset
|
||||
// Determine what the parent element is to use for calculating the offset
|
||||
var $offsetParent = this.$dropdownParent;
|
||||
|
||||
// For statically positoned elements, we need to get the element
|
||||
// For statically positioned elements, we need to get the element
|
||||
// that is determining the offset
|
||||
if ($offsetParent.css('position') === 'static') {
|
||||
$offsetParent = $offsetParent.offsetParent();
|
||||
}
|
||||
|
||||
var parentOffset = $offsetParent.offset();
|
||||
var parentOffset = {
|
||||
top: 0,
|
||||
left: 0
|
||||
};
|
||||
|
||||
if (
|
||||
$.contains(document.body, $offsetParent[0]) ||
|
||||
$offsetParent[0].isConnected
|
||||
) {
|
||||
parentOffset = $offsetParent.offset();
|
||||
}
|
||||
|
||||
css.top -= parentOffset.top;
|
||||
css.left -= parentOffset.left;
|
||||
@@ -4396,8 +4621,8 @@ S2.define('select2/dropdown/minimumResultsForSearch',[
|
||||
});
|
||||
|
||||
S2.define('select2/dropdown/selectOnClose',[
|
||||
|
||||
], function () {
|
||||
'../utils'
|
||||
], function (Utils) {
|
||||
function SelectOnClose () { }
|
||||
|
||||
SelectOnClose.prototype.bind = function (decorated, container, $container) {
|
||||
@@ -4428,7 +4653,7 @@ S2.define('select2/dropdown/selectOnClose',[
|
||||
return;
|
||||
}
|
||||
|
||||
var data = $highlightedResults.data('data');
|
||||
var data = Utils.GetData($highlightedResults[0], 'data');
|
||||
|
||||
// Don't re-select already selected resulte
|
||||
if (
|
||||
@@ -4469,7 +4694,7 @@ S2.define('select2/dropdown/closeOnSelect',[
|
||||
var originalEvent = evt.originalEvent;
|
||||
|
||||
// Don't close if the control key is being held
|
||||
if (originalEvent && originalEvent.ctrlKey) {
|
||||
if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4523,6 +4748,9 @@ S2.define('select2/i18n/en',[],function () {
|
||||
},
|
||||
searching: function () {
|
||||
return 'Searching…';
|
||||
},
|
||||
removeAllItems: function () {
|
||||
return 'Remove all items';
|
||||
}
|
||||
};
|
||||
});
|
||||
@@ -4761,66 +4989,29 @@ S2.define('select2/defaults',[
|
||||
);
|
||||
}
|
||||
|
||||
if (typeof options.language === 'string') {
|
||||
// Check if the language is specified with a region
|
||||
if (options.language.indexOf('-') > 0) {
|
||||
// Extract the region information if it is included
|
||||
var languageParts = options.language.split('-');
|
||||
var baseLanguage = languageParts[0];
|
||||
// If the defaults were not previously applied from an element, it is
|
||||
// possible for the language option to have not been resolved
|
||||
options.language = this._resolveLanguage(options.language);
|
||||
|
||||
options.language = [options.language, baseLanguage];
|
||||
} else {
|
||||
options.language = [options.language];
|
||||
// Always fall back to English since it will always be complete
|
||||
options.language.push('en');
|
||||
|
||||
var uniqueLanguages = [];
|
||||
|
||||
for (var l = 0; l < options.language.length; l++) {
|
||||
var language = options.language[l];
|
||||
|
||||
if (uniqueLanguages.indexOf(language) === -1) {
|
||||
uniqueLanguages.push(language);
|
||||
}
|
||||
}
|
||||
|
||||
if ($.isArray(options.language)) {
|
||||
var languages = new Translation();
|
||||
options.language.push('en');
|
||||
options.language = uniqueLanguages;
|
||||
|
||||
var languageNames = options.language;
|
||||
|
||||
for (var l = 0; l < languageNames.length; l++) {
|
||||
var name = languageNames[l];
|
||||
var language = {};
|
||||
|
||||
try {
|
||||
// Try to load it with the original name
|
||||
language = Translation.loadPath(name);
|
||||
} catch (e) {
|
||||
try {
|
||||
// If we couldn't load it, check if it wasn't the full path
|
||||
name = this.defaults.amdLanguageBase + name;
|
||||
language = Translation.loadPath(name);
|
||||
} catch (ex) {
|
||||
// The translation could not be loaded at all. Sometimes this is
|
||||
// because of a configuration problem, other times this can be
|
||||
// because of how Select2 helps load all possible translation files.
|
||||
if (options.debug && window.console && console.warn) {
|
||||
console.warn(
|
||||
'Select2: The language file for "' + name + '" could not be ' +
|
||||
'automatically loaded. A fallback will be used instead.'
|
||||
);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
languages.extend(language);
|
||||
}
|
||||
|
||||
options.translations = languages;
|
||||
} else {
|
||||
var baseTranslation = Translation.loadPath(
|
||||
this.defaults.amdLanguageBase + 'en'
|
||||
);
|
||||
var customTranslation = new Translation(options.language);
|
||||
|
||||
customTranslation.extend(baseTranslation);
|
||||
|
||||
options.translations = customTranslation;
|
||||
}
|
||||
options.translations = this._processTranslations(
|
||||
options.language,
|
||||
options.debug
|
||||
);
|
||||
|
||||
return options;
|
||||
};
|
||||
@@ -4887,13 +5078,14 @@ S2.define('select2/defaults',[
|
||||
debug: false,
|
||||
dropdownAutoWidth: false,
|
||||
escapeMarkup: Utils.escapeMarkup,
|
||||
language: EnglishTranslation,
|
||||
language: {},
|
||||
matcher: matcher,
|
||||
minimumInputLength: 0,
|
||||
maximumInputLength: 0,
|
||||
maximumSelectionLength: 0,
|
||||
minimumResultsForSearch: 0,
|
||||
selectOnClose: false,
|
||||
scrollAfterSelect: false,
|
||||
sorter: function (data) {
|
||||
return data;
|
||||
},
|
||||
@@ -4908,6 +5100,103 @@ S2.define('select2/defaults',[
|
||||
};
|
||||
};
|
||||
|
||||
Defaults.prototype.applyFromElement = function (options, $element) {
|
||||
var optionLanguage = options.language;
|
||||
var defaultLanguage = this.defaults.language;
|
||||
var elementLanguage = $element.prop('lang');
|
||||
var parentLanguage = $element.closest('[lang]').prop('lang');
|
||||
|
||||
var languages = Array.prototype.concat.call(
|
||||
this._resolveLanguage(elementLanguage),
|
||||
this._resolveLanguage(optionLanguage),
|
||||
this._resolveLanguage(defaultLanguage),
|
||||
this._resolveLanguage(parentLanguage)
|
||||
);
|
||||
|
||||
options.language = languages;
|
||||
|
||||
return options;
|
||||
};
|
||||
|
||||
Defaults.prototype._resolveLanguage = function (language) {
|
||||
if (!language) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($.isEmptyObject(language)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($.isPlainObject(language)) {
|
||||
return [language];
|
||||
}
|
||||
|
||||
var languages;
|
||||
|
||||
if (!$.isArray(language)) {
|
||||
languages = [language];
|
||||
} else {
|
||||
languages = language;
|
||||
}
|
||||
|
||||
var resolvedLanguages = [];
|
||||
|
||||
for (var l = 0; l < languages.length; l++) {
|
||||
resolvedLanguages.push(languages[l]);
|
||||
|
||||
if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {
|
||||
// Extract the region information if it is included
|
||||
var languageParts = languages[l].split('-');
|
||||
var baseLanguage = languageParts[0];
|
||||
|
||||
resolvedLanguages.push(baseLanguage);
|
||||
}
|
||||
}
|
||||
|
||||
return resolvedLanguages;
|
||||
};
|
||||
|
||||
Defaults.prototype._processTranslations = function (languages, debug) {
|
||||
var translations = new Translation();
|
||||
|
||||
for (var l = 0; l < languages.length; l++) {
|
||||
var languageData = new Translation();
|
||||
|
||||
var language = languages[l];
|
||||
|
||||
if (typeof language === 'string') {
|
||||
try {
|
||||
// Try to load it with the original name
|
||||
languageData = Translation.loadPath(language);
|
||||
} catch (e) {
|
||||
try {
|
||||
// If we couldn't load it, check if it wasn't the full path
|
||||
language = this.defaults.amdLanguageBase + language;
|
||||
languageData = Translation.loadPath(language);
|
||||
} catch (ex) {
|
||||
// The translation could not be loaded at all. Sometimes this is
|
||||
// because of a configuration problem, other times this can be
|
||||
// because of how Select2 helps load all possible translation files
|
||||
if (debug && window.console && console.warn) {
|
||||
console.warn(
|
||||
'Select2: The language file for "' + language + '" could ' +
|
||||
'not be automatically loaded. A fallback will be used instead.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if ($.isPlainObject(language)) {
|
||||
languageData = new Translation(language);
|
||||
} else {
|
||||
languageData = language;
|
||||
}
|
||||
|
||||
translations.extend(languageData);
|
||||
}
|
||||
|
||||
return translations;
|
||||
};
|
||||
|
||||
Defaults.prototype.set = function (key, value) {
|
||||
var camelKey = $.camelCase(key);
|
||||
|
||||
@@ -4916,7 +5205,7 @@ S2.define('select2/defaults',[
|
||||
|
||||
var convertedData = Utils._convertData(data);
|
||||
|
||||
$.extend(this.defaults, convertedData);
|
||||
$.extend(true, this.defaults, convertedData);
|
||||
};
|
||||
|
||||
var defaults = new Defaults();
|
||||
@@ -4937,6 +5226,10 @@ S2.define('select2/options',[
|
||||
this.fromElement($element);
|
||||
}
|
||||
|
||||
if ($element != null) {
|
||||
this.options = Defaults.applyFromElement(this.options, $element);
|
||||
}
|
||||
|
||||
this.options = Defaults.apply(this.options);
|
||||
|
||||
if ($element && $element.is('input')) {
|
||||
@@ -4960,14 +5253,6 @@ S2.define('select2/options',[
|
||||
this.options.disabled = $e.prop('disabled');
|
||||
}
|
||||
|
||||
if (this.options.language == null) {
|
||||
if ($e.prop('lang')) {
|
||||
this.options.language = $e.prop('lang').toLowerCase();
|
||||
} else if ($e.closest('[lang]').prop('lang')) {
|
||||
this.options.language = $e.closest('[lang]').prop('lang');
|
||||
}
|
||||
}
|
||||
|
||||
if (this.options.dir == null) {
|
||||
if ($e.prop('dir')) {
|
||||
this.options.dir = $e.prop('dir');
|
||||
@@ -4981,7 +5266,7 @@ S2.define('select2/options',[
|
||||
$e.prop('disabled', this.options.disabled);
|
||||
$e.prop('multiple', this.options.multiple);
|
||||
|
||||
if ($e.data('select2Tags')) {
|
||||
if (Utils.GetData($e[0], 'select2Tags')) {
|
||||
if (this.options.debug && window.console && console.warn) {
|
||||
console.warn(
|
||||
'Select2: The `data-select2-tags` attribute has been changed to ' +
|
||||
@@ -4990,11 +5275,11 @@ S2.define('select2/options',[
|
||||
);
|
||||
}
|
||||
|
||||
$e.data('data', $e.data('select2Tags'));
|
||||
$e.data('tags', true);
|
||||
Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));
|
||||
Utils.StoreData($e[0], 'tags', true);
|
||||
}
|
||||
|
||||
if ($e.data('ajaxUrl')) {
|
||||
if (Utils.GetData($e[0], 'ajaxUrl')) {
|
||||
if (this.options.debug && window.console && console.warn) {
|
||||
console.warn(
|
||||
'Select2: The `data-ajax-url` attribute has been changed to ' +
|
||||
@@ -5003,21 +5288,45 @@ S2.define('select2/options',[
|
||||
);
|
||||
}
|
||||
|
||||
$e.attr('ajax--url', $e.data('ajaxUrl'));
|
||||
$e.data('ajax--url', $e.data('ajaxUrl'));
|
||||
$e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));
|
||||
Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));
|
||||
}
|
||||
|
||||
var dataset = {};
|
||||
|
||||
function upperCaseLetter(_, letter) {
|
||||
return letter.toUpperCase();
|
||||
}
|
||||
|
||||
// Pre-load all of the attributes which are prefixed with `data-`
|
||||
for (var attr = 0; attr < $e[0].attributes.length; attr++) {
|
||||
var attributeName = $e[0].attributes[attr].name;
|
||||
var prefix = 'data-';
|
||||
|
||||
if (attributeName.substr(0, prefix.length) == prefix) {
|
||||
// Get the contents of the attribute after `data-`
|
||||
var dataName = attributeName.substring(prefix.length);
|
||||
|
||||
// Get the data contents from the consistent source
|
||||
// This is more than likely the jQuery data helper
|
||||
var dataValue = Utils.GetData($e[0], dataName);
|
||||
|
||||
// camelCase the attribute name to match the spec
|
||||
var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);
|
||||
|
||||
// Store the data attribute contents into the dataset since
|
||||
dataset[camelDataName] = dataValue;
|
||||
}
|
||||
}
|
||||
|
||||
// Prefer the element's `dataset` attribute if it exists
|
||||
// jQuery 1.x does not correctly handle data attributes with multiple dashes
|
||||
if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {
|
||||
dataset = $.extend(true, {}, $e[0].dataset, $e.data());
|
||||
} else {
|
||||
dataset = $e.data();
|
||||
dataset = $.extend(true, {}, $e[0].dataset, dataset);
|
||||
}
|
||||
|
||||
var data = $.extend(true, {}, dataset);
|
||||
// Prefer our internal data cache if it exists
|
||||
var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);
|
||||
|
||||
data = Utils._convertData(data);
|
||||
|
||||
@@ -5054,8 +5363,8 @@ S2.define('select2/core',[
|
||||
'./keys'
|
||||
], function ($, Options, Utils, KEYS) {
|
||||
var Select2 = function ($element, options) {
|
||||
if ($element.data('select2') != null) {
|
||||
$element.data('select2').destroy();
|
||||
if (Utils.GetData($element[0], 'select2') != null) {
|
||||
Utils.GetData($element[0], 'select2').destroy();
|
||||
}
|
||||
|
||||
this.$element = $element;
|
||||
@@ -5071,7 +5380,7 @@ S2.define('select2/core',[
|
||||
// Set up the tabindex
|
||||
|
||||
var tabindex = $element.attr('tabindex') || 0;
|
||||
$element.data('old-tabindex', tabindex);
|
||||
Utils.StoreData($element[0], 'old-tabindex', tabindex);
|
||||
$element.attr('tabindex', '-1');
|
||||
|
||||
// Set up containers and adapters
|
||||
@@ -5132,6 +5441,9 @@ S2.define('select2/core',[
|
||||
// Synchronize any monitored attributes
|
||||
this._syncAttributes();
|
||||
|
||||
Utils.StoreData($element[0], 'select2', this);
|
||||
|
||||
// Ensure backwards compatibility with $element.data('select2').
|
||||
$element.data('select2', this);
|
||||
};
|
||||
|
||||
@@ -5208,6 +5520,12 @@ S2.define('select2/core',[
|
||||
return null;
|
||||
}
|
||||
|
||||
if (method == 'computedstyle') {
|
||||
var computedStyle = window.getComputedStyle($element[0]);
|
||||
|
||||
return computedStyle.width;
|
||||
}
|
||||
|
||||
return method;
|
||||
};
|
||||
|
||||
@@ -5248,8 +5566,8 @@ S2.define('select2/core',[
|
||||
|
||||
if (observer != null) {
|
||||
this._observer = new observer(function (mutations) {
|
||||
$.each(mutations, self._syncA);
|
||||
$.each(mutations, self._syncS);
|
||||
self._syncA();
|
||||
self._syncS(null, mutations);
|
||||
});
|
||||
this._observer.observe(this.$element[0], {
|
||||
attributes: true,
|
||||
@@ -5371,7 +5689,7 @@ S2.define('select2/core',[
|
||||
if (self.isOpen()) {
|
||||
if (key === KEYS.ESC || key === KEYS.TAB ||
|
||||
(key === KEYS.UP && evt.altKey)) {
|
||||
self.close();
|
||||
self.close(evt);
|
||||
|
||||
evt.preventDefault();
|
||||
} else if (key === KEYS.ENTER) {
|
||||
@@ -5405,7 +5723,7 @@ S2.define('select2/core',[
|
||||
Select2.prototype._syncAttributes = function () {
|
||||
this.options.set('disabled', this.$element.prop('disabled'));
|
||||
|
||||
if (this.options.get('disabled')) {
|
||||
if (this.isDisabled()) {
|
||||
if (this.isOpen()) {
|
||||
this.close();
|
||||
}
|
||||
@@ -5416,7 +5734,7 @@ S2.define('select2/core',[
|
||||
}
|
||||
};
|
||||
|
||||
Select2.prototype._syncSubtree = function (evt, mutations) {
|
||||
Select2.prototype._isChangeMutation = function (evt, mutations) {
|
||||
var changed = false;
|
||||
var self = this;
|
||||
|
||||
@@ -5444,7 +5762,22 @@ S2.define('select2/core',[
|
||||
}
|
||||
} else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
|
||||
changed = true;
|
||||
} else if ($.isArray(mutations)) {
|
||||
$.each(mutations, function(evt, mutation) {
|
||||
if (self._isChangeMutation(evt, mutation)) {
|
||||
// We've found a change mutation.
|
||||
// Let's escape from the loop and continue
|
||||
changed = true;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
return changed;
|
||||
};
|
||||
|
||||
Select2.prototype._syncSubtree = function (evt, mutations) {
|
||||
var changed = this._isChangeMutation(evt, mutations);
|
||||
var self = this;
|
||||
|
||||
// Only re-pull the data if we think there is a change
|
||||
if (changed) {
|
||||
@@ -5466,7 +5799,8 @@ S2.define('select2/core',[
|
||||
'open': 'opening',
|
||||
'close': 'closing',
|
||||
'select': 'selecting',
|
||||
'unselect': 'unselecting'
|
||||
'unselect': 'unselecting',
|
||||
'clear': 'clearing'
|
||||
};
|
||||
|
||||
if (args === undefined) {
|
||||
@@ -5494,7 +5828,7 @@ S2.define('select2/core',[
|
||||
};
|
||||
|
||||
Select2.prototype.toggleDropdown = function () {
|
||||
if (this.options.get('disabled')) {
|
||||
if (this.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5510,15 +5844,40 @@ S2.define('select2/core',[
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.trigger('query', {});
|
||||
};
|
||||
|
||||
Select2.prototype.close = function () {
|
||||
Select2.prototype.close = function (evt) {
|
||||
if (!this.isOpen()) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.trigger('close', {});
|
||||
this.trigger('close', { originalEvent : evt });
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper method to abstract the "enabled" (not "disabled") state of this
|
||||
* object.
|
||||
*
|
||||
* @return {true} if the instance is not disabled.
|
||||
* @return {false} if the instance is disabled.
|
||||
*/
|
||||
Select2.prototype.isEnabled = function () {
|
||||
return !this.isDisabled();
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper method to abstract the "disabled" state of this object.
|
||||
*
|
||||
* @return {true} if the disabled option is true.
|
||||
* @return {false} if the disabled option is false.
|
||||
*/
|
||||
Select2.prototype.isDisabled = function () {
|
||||
return this.options.get('disabled');
|
||||
};
|
||||
|
||||
Select2.prototype.isOpen = function () {
|
||||
@@ -5595,7 +5954,7 @@ S2.define('select2/core',[
|
||||
});
|
||||
}
|
||||
|
||||
this.$element.val(newVal).trigger('change');
|
||||
this.$element.val(newVal).trigger('input').trigger('change');
|
||||
};
|
||||
|
||||
Select2.prototype.destroy = function () {
|
||||
@@ -5621,10 +5980,12 @@ S2.define('select2/core',[
|
||||
this._syncS = null;
|
||||
|
||||
this.$element.off('.select2');
|
||||
this.$element.attr('tabindex', this.$element.data('old-tabindex'));
|
||||
this.$element.attr('tabindex',
|
||||
Utils.GetData(this.$element[0], 'old-tabindex'));
|
||||
|
||||
this.$element.removeClass('select2-hidden-accessible');
|
||||
this.$element.attr('aria-hidden', 'false');
|
||||
Utils.RemoveData(this.$element[0]);
|
||||
this.$element.removeData('select2');
|
||||
|
||||
this.dataAdapter.destroy();
|
||||
@@ -5652,7 +6013,7 @@ S2.define('select2/core',[
|
||||
|
||||
this.$container.addClass('select2-container--' + this.options.get('theme'));
|
||||
|
||||
$container.data('element', this.$element);
|
||||
Utils.StoreData($container[0], 'element', this.$element);
|
||||
|
||||
return $container;
|
||||
};
|
||||
@@ -5862,8 +6223,9 @@ S2.define('select2/compat/initSelection',[
|
||||
});
|
||||
|
||||
S2.define('select2/compat/inputData',[
|
||||
'jquery'
|
||||
], function ($) {
|
||||
'jquery',
|
||||
'../utils'
|
||||
], function ($, Utils) {
|
||||
function InputData (decorated, $element, options) {
|
||||
this._currentData = [];
|
||||
this._valueSeparator = options.get('valueSeparator') || ',';
|
||||
@@ -5927,13 +6289,13 @@ S2.define('select2/compat/inputData',[
|
||||
});
|
||||
|
||||
this.$element.val(data.id);
|
||||
this.$element.trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
} else {
|
||||
var value = this.$element.val();
|
||||
value += this._valueSeparator + data.id;
|
||||
|
||||
this.$element.val(value);
|
||||
this.$element.trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -5956,7 +6318,7 @@ S2.define('select2/compat/inputData',[
|
||||
}
|
||||
|
||||
self.$element.val(values.join(self._valueSeparator));
|
||||
self.$element.trigger('change');
|
||||
self.$element.trigger('input').trigger('change');
|
||||
});
|
||||
};
|
||||
|
||||
@@ -5980,7 +6342,7 @@ S2.define('select2/compat/inputData',[
|
||||
|
||||
InputData.prototype.addOptions = function (_, $options) {
|
||||
var options = $.map($options, function ($option) {
|
||||
return $.data($option[0], 'data');
|
||||
return Utils.GetData($option[0], 'data');
|
||||
});
|
||||
|
||||
this._currentData.push.apply(this._currentData, options);
|
||||
@@ -6383,8 +6745,9 @@ S2.define('jquery.select2',[
|
||||
'jquery-mousewheel',
|
||||
|
||||
'./select2/core',
|
||||
'./select2/defaults'
|
||||
], function ($, _, Select2, Defaults) {
|
||||
'./select2/defaults',
|
||||
'./select2/utils'
|
||||
], function ($, _, Select2, Defaults, Utils) {
|
||||
if ($.fn.select2 == null) {
|
||||
// All methods that should return the element
|
||||
var thisMethods = ['open', 'close', 'destroy'];
|
||||
@@ -6405,7 +6768,7 @@ S2.define('jquery.select2',[
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
|
||||
this.each(function () {
|
||||
var instance = $(this).data('select2');
|
||||
var instance = Utils.GetData(this, 'select2');
|
||||
|
||||
if (instance == null && window.console && console.error) {
|
||||
console.error(
|
||||
|
||||
Vendored
+2
-1
File diff suppressed because one or more lines are too long
Vendored
+576
-214
@@ -1,11 +1,11 @@
|
||||
/*!
|
||||
* Select2 4.0.5
|
||||
* Select2 4.0.13
|
||||
* https://select2.github.io
|
||||
*
|
||||
* Released under the MIT license
|
||||
* https://github.com/select2/select2/blob/master/LICENSE.md
|
||||
*/
|
||||
(function (factory) {
|
||||
;(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['jquery'], factory);
|
||||
@@ -574,10 +574,10 @@ S2.define('select2/utils',[
|
||||
DecoratedClass.prototype = new ctr();
|
||||
|
||||
for (var m = 0; m < superMethods.length; m++) {
|
||||
var superMethod = superMethods[m];
|
||||
var superMethod = superMethods[m];
|
||||
|
||||
DecoratedClass.prototype[superMethod] =
|
||||
SuperClass.prototype[superMethod];
|
||||
DecoratedClass.prototype[superMethod] =
|
||||
SuperClass.prototype[superMethod];
|
||||
}
|
||||
|
||||
var calledMethod = function (methodName) {
|
||||
@@ -772,6 +772,70 @@ S2.define('select2/utils',[
|
||||
$element.append($nodes);
|
||||
};
|
||||
|
||||
// Cache objects in Utils.__cache instead of $.data (see #4346)
|
||||
Utils.__cache = {};
|
||||
|
||||
var id = 0;
|
||||
Utils.GetUniqueElementId = function (element) {
|
||||
// Get a unique element Id. If element has no id,
|
||||
// creates a new unique number, stores it in the id
|
||||
// attribute and returns the new id.
|
||||
// If an id already exists, it simply returns it.
|
||||
|
||||
var select2Id = element.getAttribute('data-select2-id');
|
||||
if (select2Id == null) {
|
||||
// If element has id, use it.
|
||||
if (element.id) {
|
||||
select2Id = element.id;
|
||||
element.setAttribute('data-select2-id', select2Id);
|
||||
} else {
|
||||
element.setAttribute('data-select2-id', ++id);
|
||||
select2Id = id.toString();
|
||||
}
|
||||
}
|
||||
return select2Id;
|
||||
};
|
||||
|
||||
Utils.StoreData = function (element, name, value) {
|
||||
// Stores an item in the cache for a specified element.
|
||||
// name is the cache key.
|
||||
var id = Utils.GetUniqueElementId(element);
|
||||
if (!Utils.__cache[id]) {
|
||||
Utils.__cache[id] = {};
|
||||
}
|
||||
|
||||
Utils.__cache[id][name] = value;
|
||||
};
|
||||
|
||||
Utils.GetData = function (element, name) {
|
||||
// Retrieves a value from the cache by its key (name)
|
||||
// name is optional. If no name specified, return
|
||||
// all cache items for the specified element.
|
||||
// and for a specified element.
|
||||
var id = Utils.GetUniqueElementId(element);
|
||||
if (name) {
|
||||
if (Utils.__cache[id]) {
|
||||
if (Utils.__cache[id][name] != null) {
|
||||
return Utils.__cache[id][name];
|
||||
}
|
||||
return $(element).data(name); // Fallback to HTML5 data attribs.
|
||||
}
|
||||
return $(element).data(name); // Fallback to HTML5 data attribs.
|
||||
} else {
|
||||
return Utils.__cache[id];
|
||||
}
|
||||
};
|
||||
|
||||
Utils.RemoveData = function (element) {
|
||||
// Removes all cached items for a specified element.
|
||||
var id = Utils.GetUniqueElementId(element);
|
||||
if (Utils.__cache[id] != null) {
|
||||
delete Utils.__cache[id];
|
||||
}
|
||||
|
||||
element.removeAttribute('data-select2-id');
|
||||
};
|
||||
|
||||
return Utils;
|
||||
});
|
||||
|
||||
@@ -791,7 +855,7 @@ S2.define('select2/results',[
|
||||
|
||||
Results.prototype.render = function () {
|
||||
var $results = $(
|
||||
'<ul class="select2-results__options" role="tree"></ul>'
|
||||
'<ul class="select2-results__options" role="listbox"></ul>'
|
||||
);
|
||||
|
||||
if (this.options.get('multiple')) {
|
||||
@@ -814,7 +878,7 @@ S2.define('select2/results',[
|
||||
this.hideLoading();
|
||||
|
||||
var $message = $(
|
||||
'<li role="treeitem" aria-live="assertive"' +
|
||||
'<li role="alert" aria-live="assertive"' +
|
||||
' class="select2-results__option"></li>'
|
||||
);
|
||||
|
||||
@@ -907,7 +971,7 @@ S2.define('select2/results',[
|
||||
$options.each(function () {
|
||||
var $option = $(this);
|
||||
|
||||
var item = $.data(this, 'data');
|
||||
var item = Utils.GetData(this, 'data');
|
||||
|
||||
// id needs to be converted to a string when comparing
|
||||
var id = '' + item.id;
|
||||
@@ -948,11 +1012,16 @@ S2.define('select2/results',[
|
||||
option.className = 'select2-results__option';
|
||||
|
||||
var attrs = {
|
||||
'role': 'treeitem',
|
||||
'role': 'option',
|
||||
'aria-selected': 'false'
|
||||
};
|
||||
|
||||
if (data.disabled) {
|
||||
var matches = window.Element.prototype.matches ||
|
||||
window.Element.prototype.msMatchesSelector ||
|
||||
window.Element.prototype.webkitMatchesSelector;
|
||||
|
||||
if ((data.element != null && matches.call(data.element, ':disabled')) ||
|
||||
(data.element == null && data.disabled)) {
|
||||
delete attrs['aria-selected'];
|
||||
attrs['aria-disabled'] = 'true';
|
||||
}
|
||||
@@ -1012,7 +1081,7 @@ S2.define('select2/results',[
|
||||
this.template(data, option);
|
||||
}
|
||||
|
||||
$.data(option, 'data', data);
|
||||
Utils.StoreData(option, 'data', data);
|
||||
|
||||
return option;
|
||||
};
|
||||
@@ -1053,7 +1122,10 @@ S2.define('select2/results',[
|
||||
}
|
||||
|
||||
self.setClasses();
|
||||
self.highlightFirstItem();
|
||||
|
||||
if (self.options.get('scrollAfterSelect')) {
|
||||
self.highlightFirstItem();
|
||||
}
|
||||
});
|
||||
|
||||
container.on('unselect', function () {
|
||||
@@ -1062,7 +1134,10 @@ S2.define('select2/results',[
|
||||
}
|
||||
|
||||
self.setClasses();
|
||||
self.highlightFirstItem();
|
||||
|
||||
if (self.options.get('scrollAfterSelect')) {
|
||||
self.highlightFirstItem();
|
||||
}
|
||||
});
|
||||
|
||||
container.on('open', function () {
|
||||
@@ -1098,7 +1173,7 @@ S2.define('select2/results',[
|
||||
return;
|
||||
}
|
||||
|
||||
var data = $highlighted.data('data');
|
||||
var data = Utils.GetData($highlighted[0], 'data');
|
||||
|
||||
if ($highlighted.attr('aria-selected') == 'true') {
|
||||
self.trigger('close', {});
|
||||
@@ -1116,8 +1191,9 @@ S2.define('select2/results',[
|
||||
|
||||
var currentIndex = $options.index($highlighted);
|
||||
|
||||
// If we are already at te top, don't move further
|
||||
if (currentIndex === 0) {
|
||||
// If we are already at the top, don't move further
|
||||
// If no options, currentIndex will be -1
|
||||
if (currentIndex <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1210,7 +1286,7 @@ S2.define('select2/results',[
|
||||
function (evt) {
|
||||
var $this = $(this);
|
||||
|
||||
var data = $this.data('data');
|
||||
var data = Utils.GetData(this, 'data');
|
||||
|
||||
if ($this.attr('aria-selected') === 'true') {
|
||||
if (self.options.get('multiple')) {
|
||||
@@ -1233,7 +1309,7 @@ S2.define('select2/results',[
|
||||
|
||||
this.$results.on('mouseenter', '.select2-results__option[aria-selected]',
|
||||
function (evt) {
|
||||
var data = $(this).data('data');
|
||||
var data = Utils.GetData(this, 'data');
|
||||
|
||||
self.getHighlightedResults()
|
||||
.removeClass('select2-results__option--highlighted');
|
||||
@@ -1348,14 +1424,15 @@ S2.define('select2/selection/base',[
|
||||
|
||||
this._tabindex = 0;
|
||||
|
||||
if (this.$element.data('old-tabindex') != null) {
|
||||
this._tabindex = this.$element.data('old-tabindex');
|
||||
if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {
|
||||
this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');
|
||||
} else if (this.$element.attr('tabindex') != null) {
|
||||
this._tabindex = this.$element.attr('tabindex');
|
||||
}
|
||||
|
||||
$selection.attr('title', this.$element.attr('title'));
|
||||
$selection.attr('tabindex', this._tabindex);
|
||||
$selection.attr('aria-disabled', 'false');
|
||||
|
||||
this.$selection = $selection;
|
||||
|
||||
@@ -1365,7 +1442,6 @@ S2.define('select2/selection/base',[
|
||||
BaseSelection.prototype.bind = function (container, $container) {
|
||||
var self = this;
|
||||
|
||||
var id = container.id + '-container';
|
||||
var resultsId = container.id + '-results';
|
||||
|
||||
this.container = container;
|
||||
@@ -1408,17 +1484,19 @@ S2.define('select2/selection/base',[
|
||||
self.$selection.removeAttr('aria-activedescendant');
|
||||
self.$selection.removeAttr('aria-owns');
|
||||
|
||||
self.$selection.focus();
|
||||
self.$selection.trigger('focus');
|
||||
|
||||
self._detachCloseHandler(container);
|
||||
});
|
||||
|
||||
container.on('enable', function () {
|
||||
self.$selection.attr('tabindex', self._tabindex);
|
||||
self.$selection.attr('aria-disabled', 'false');
|
||||
});
|
||||
|
||||
container.on('disable', function () {
|
||||
self.$selection.attr('tabindex', '-1');
|
||||
self.$selection.attr('aria-disabled', 'true');
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1441,7 +1519,6 @@ S2.define('select2/selection/base',[
|
||||
};
|
||||
|
||||
BaseSelection.prototype._attachCloseHandler = function (container) {
|
||||
var self = this;
|
||||
|
||||
$(document.body).on('mousedown.select2.' + container.id, function (e) {
|
||||
var $target = $(e.target);
|
||||
@@ -1451,13 +1528,11 @@ S2.define('select2/selection/base',[
|
||||
var $all = $('.select2.select2-container--open');
|
||||
|
||||
$all.each(function () {
|
||||
var $this = $(this);
|
||||
|
||||
if (this == $select[0]) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $element = $this.data('element');
|
||||
var $element = Utils.GetData(this, 'element');
|
||||
|
||||
$element.select2('close');
|
||||
});
|
||||
@@ -1481,6 +1556,27 @@ S2.define('select2/selection/base',[
|
||||
throw new Error('The `update` method must be defined in child classes.');
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper method to abstract the "enabled" (not "disabled") state of this
|
||||
* object.
|
||||
*
|
||||
* @return {true} if the instance is not disabled.
|
||||
* @return {false} if the instance is disabled.
|
||||
*/
|
||||
BaseSelection.prototype.isEnabled = function () {
|
||||
return !this.isDisabled();
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper method to abstract the "disabled" state of this object.
|
||||
*
|
||||
* @return {true} if the disabled option is true.
|
||||
* @return {false} if the disabled option is false.
|
||||
*/
|
||||
BaseSelection.prototype.isDisabled = function () {
|
||||
return this.options.get('disabled');
|
||||
};
|
||||
|
||||
return BaseSelection;
|
||||
});
|
||||
|
||||
@@ -1518,7 +1614,10 @@ S2.define('select2/selection/single',[
|
||||
|
||||
var id = container.id + '-container';
|
||||
|
||||
this.$selection.find('.select2-selection__rendered').attr('id', id);
|
||||
this.$selection.find('.select2-selection__rendered')
|
||||
.attr('id', id)
|
||||
.attr('role', 'textbox')
|
||||
.attr('aria-readonly', 'true');
|
||||
this.$selection.attr('aria-labelledby', id);
|
||||
|
||||
this.$selection.on('mousedown', function (evt) {
|
||||
@@ -1542,17 +1641,15 @@ S2.define('select2/selection/single',[
|
||||
|
||||
container.on('focus', function (evt) {
|
||||
if (!container.isOpen()) {
|
||||
self.$selection.focus();
|
||||
self.$selection.trigger('focus');
|
||||
}
|
||||
});
|
||||
|
||||
container.on('selection:update', function (params) {
|
||||
self.update(params.data);
|
||||
});
|
||||
};
|
||||
|
||||
SingleSelection.prototype.clear = function () {
|
||||
this.$selection.find('.select2-selection__rendered').empty();
|
||||
var $rendered = this.$selection.find('.select2-selection__rendered');
|
||||
$rendered.empty();
|
||||
$rendered.removeAttr('title'); // clear tooltip on empty
|
||||
};
|
||||
|
||||
SingleSelection.prototype.display = function (data, container) {
|
||||
@@ -1578,7 +1675,14 @@ S2.define('select2/selection/single',[
|
||||
var formatted = this.display(selection, $rendered);
|
||||
|
||||
$rendered.empty().append(formatted);
|
||||
$rendered.prop('title', selection.title || selection.text);
|
||||
|
||||
var title = selection.title || selection.text;
|
||||
|
||||
if (title) {
|
||||
$rendered.attr('title', title);
|
||||
} else {
|
||||
$rendered.removeAttr('title');
|
||||
}
|
||||
};
|
||||
|
||||
return SingleSelection;
|
||||
@@ -1623,14 +1727,14 @@ S2.define('select2/selection/multiple',[
|
||||
'.select2-selection__choice__remove',
|
||||
function (evt) {
|
||||
// Ignore the event if it is disabled
|
||||
if (self.options.get('disabled')) {
|
||||
if (self.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $remove = $(this);
|
||||
var $selection = $remove.parent();
|
||||
|
||||
var data = $selection.data('data');
|
||||
var data = Utils.GetData($selection[0], 'data');
|
||||
|
||||
self.trigger('unselect', {
|
||||
originalEvent: evt,
|
||||
@@ -1641,7 +1745,9 @@ S2.define('select2/selection/multiple',[
|
||||
};
|
||||
|
||||
MultipleSelection.prototype.clear = function () {
|
||||
this.$selection.find('.select2-selection__rendered').empty();
|
||||
var $rendered = this.$selection.find('.select2-selection__rendered');
|
||||
$rendered.empty();
|
||||
$rendered.removeAttr('title');
|
||||
};
|
||||
|
||||
MultipleSelection.prototype.display = function (data, container) {
|
||||
@@ -1679,9 +1785,14 @@ S2.define('select2/selection/multiple',[
|
||||
var formatted = this.display(selection, $selection);
|
||||
|
||||
$selection.append(formatted);
|
||||
$selection.prop('title', selection.title || selection.text);
|
||||
|
||||
$selection.data('data', selection);
|
||||
var title = selection.title || selection.text;
|
||||
|
||||
if (title) {
|
||||
$selection.attr('title', title);
|
||||
}
|
||||
|
||||
Utils.StoreData($selection[0], 'data', selection);
|
||||
|
||||
$selections.push($selection);
|
||||
}
|
||||
@@ -1746,8 +1857,9 @@ S2.define('select2/selection/placeholder',[
|
||||
|
||||
S2.define('select2/selection/allowClear',[
|
||||
'jquery',
|
||||
'../keys'
|
||||
], function ($, KEYS) {
|
||||
'../keys',
|
||||
'../utils'
|
||||
], function ($, KEYS, Utils) {
|
||||
function AllowClear () { }
|
||||
|
||||
AllowClear.prototype.bind = function (decorated, container, $container) {
|
||||
@@ -1776,7 +1888,7 @@ S2.define('select2/selection/allowClear',[
|
||||
|
||||
AllowClear.prototype._handleClear = function (_, evt) {
|
||||
// Ignore the event if it is disabled
|
||||
if (this.options.get('disabled')) {
|
||||
if (this.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1789,10 +1901,22 @@ S2.define('select2/selection/allowClear',[
|
||||
|
||||
evt.stopPropagation();
|
||||
|
||||
var data = $clear.data('data');
|
||||
var data = Utils.GetData($clear[0], 'data');
|
||||
|
||||
var previousVal = this.$element.val();
|
||||
this.$element.val(this.placeholder.id);
|
||||
|
||||
var unselectData = {
|
||||
data: data
|
||||
};
|
||||
this.trigger('clear', unselectData);
|
||||
if (unselectData.prevented) {
|
||||
this.$element.val(previousVal);
|
||||
return;
|
||||
}
|
||||
|
||||
for (var d = 0; d < data.length; d++) {
|
||||
var unselectData = {
|
||||
unselectData = {
|
||||
data: data[d]
|
||||
};
|
||||
|
||||
@@ -1802,11 +1926,12 @@ S2.define('select2/selection/allowClear',[
|
||||
|
||||
// If the event was prevented, don't clear it out.
|
||||
if (unselectData.prevented) {
|
||||
this.$element.val(previousVal);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
this.$element.val(this.placeholder.id).trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
|
||||
this.trigger('toggle', {});
|
||||
};
|
||||
@@ -1829,12 +1954,14 @@ S2.define('select2/selection/allowClear',[
|
||||
return;
|
||||
}
|
||||
|
||||
var removeAll = this.options.get('translations').get('removeAllItems');
|
||||
|
||||
var $remove = $(
|
||||
'<span class="select2-selection__clear">' +
|
||||
'<span class="select2-selection__clear" title="' + removeAll() +'">' +
|
||||
'×' +
|
||||
'</span>'
|
||||
);
|
||||
$remove.data('data', data);
|
||||
Utils.StoreData($remove[0], 'data', data);
|
||||
|
||||
this.$selection.find('.select2-selection__rendered').prepend($remove);
|
||||
};
|
||||
@@ -1856,7 +1983,7 @@ S2.define('select2/selection/search',[
|
||||
'<li class="select2-search select2-search--inline">' +
|
||||
'<input class="select2-search__field" type="search" tabindex="-1"' +
|
||||
' autocomplete="off" autocorrect="off" autocapitalize="none"' +
|
||||
' spellcheck="false" role="textbox" aria-autocomplete="list" />' +
|
||||
' spellcheck="false" role="searchbox" aria-autocomplete="list" />' +
|
||||
'</li>'
|
||||
);
|
||||
|
||||
@@ -1873,14 +2000,18 @@ S2.define('select2/selection/search',[
|
||||
Search.prototype.bind = function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
var resultsId = container.id + '-results';
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
container.on('open', function () {
|
||||
self.$search.attr('aria-controls', resultsId);
|
||||
self.$search.trigger('focus');
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
self.$search.val('');
|
||||
self.$search.removeAttr('aria-controls');
|
||||
self.$search.removeAttr('aria-activedescendant');
|
||||
self.$search.trigger('focus');
|
||||
});
|
||||
@@ -1900,7 +2031,11 @@ S2.define('select2/selection/search',[
|
||||
});
|
||||
|
||||
container.on('results:focus', function (params) {
|
||||
self.$search.attr('aria-activedescendant', params.id);
|
||||
if (params.data._resultId) {
|
||||
self.$search.attr('aria-activedescendant', params.data._resultId);
|
||||
} else {
|
||||
self.$search.removeAttr('aria-activedescendant');
|
||||
}
|
||||
});
|
||||
|
||||
this.$selection.on('focusin', '.select2-search--inline', function (evt) {
|
||||
@@ -1925,7 +2060,7 @@ S2.define('select2/selection/search',[
|
||||
.prev('.select2-selection__choice');
|
||||
|
||||
if ($previousChoice.length > 0) {
|
||||
var item = $previousChoice.data('data');
|
||||
var item = Utils.GetData($previousChoice[0], 'data');
|
||||
|
||||
self.searchRemoveChoice(item);
|
||||
|
||||
@@ -1934,6 +2069,12 @@ S2.define('select2/selection/search',[
|
||||
}
|
||||
});
|
||||
|
||||
this.$selection.on('click', '.select2-search--inline', function (evt) {
|
||||
if (self.$search.val()) {
|
||||
evt.stopPropagation();
|
||||
}
|
||||
});
|
||||
|
||||
// Try to detect the IE version should the `documentMode` property that
|
||||
// is stored on the document. This is only implemented in IE and is
|
||||
// slightly cleaner than doing a user agent check.
|
||||
@@ -2019,7 +2160,7 @@ S2.define('select2/selection/search',[
|
||||
|
||||
this.resizeSearch();
|
||||
if (searchHadFocus) {
|
||||
this.$search.focus();
|
||||
this.$search.trigger('focus');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -2052,7 +2193,7 @@ S2.define('select2/selection/search',[
|
||||
var width = '';
|
||||
|
||||
if (this.$search.attr('placeholder') !== '') {
|
||||
width = this.$selection.find('.select2-selection__rendered').innerWidth();
|
||||
width = this.$selection.find('.select2-selection__rendered').width();
|
||||
} else {
|
||||
var minimumWidth = this.$search.val().length + 1;
|
||||
|
||||
@@ -2076,10 +2217,13 @@ S2.define('select2/selection/eventRelay',[
|
||||
'open', 'opening',
|
||||
'close', 'closing',
|
||||
'select', 'selecting',
|
||||
'unselect', 'unselecting'
|
||||
'unselect', 'unselecting',
|
||||
'clear', 'clearing'
|
||||
];
|
||||
|
||||
var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting'];
|
||||
var preventableEvents = [
|
||||
'opening', 'closing', 'selecting', 'unselecting', 'clearing'
|
||||
];
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
@@ -2412,6 +2556,7 @@ S2.define('select2/diacritics',[
|
||||
'\u019F': 'O',
|
||||
'\uA74A': 'O',
|
||||
'\uA74C': 'O',
|
||||
'\u0152': 'OE',
|
||||
'\u01A2': 'OI',
|
||||
'\uA74E': 'OO',
|
||||
'\u0222': 'OU',
|
||||
@@ -2821,6 +2966,7 @@ S2.define('select2/diacritics',[
|
||||
'\uA74B': 'o',
|
||||
'\uA74D': 'o',
|
||||
'\u0275': 'o',
|
||||
'\u0153': 'oe',
|
||||
'\u01A3': 'oi',
|
||||
'\u0223': 'ou',
|
||||
'\uA74F': 'oo',
|
||||
@@ -2989,8 +3135,9 @@ S2.define('select2/diacritics',[
|
||||
'\u03CD': '\u03C5',
|
||||
'\u03CB': '\u03C5',
|
||||
'\u03B0': '\u03C5',
|
||||
'\u03C9': '\u03C9',
|
||||
'\u03C2': '\u03C3'
|
||||
'\u03CE': '\u03C9',
|
||||
'\u03C2': '\u03C3',
|
||||
'\u2019': '\''
|
||||
};
|
||||
|
||||
return diacritics;
|
||||
@@ -3075,7 +3222,7 @@ S2.define('select2/data/select',[
|
||||
if ($(data.element).is('option')) {
|
||||
data.element.selected = true;
|
||||
|
||||
this.$element.trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -3096,13 +3243,13 @@ S2.define('select2/data/select',[
|
||||
}
|
||||
|
||||
self.$element.val(val);
|
||||
self.$element.trigger('change');
|
||||
self.$element.trigger('input').trigger('change');
|
||||
});
|
||||
} else {
|
||||
var val = data.id;
|
||||
|
||||
this.$element.val(val);
|
||||
this.$element.trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -3118,7 +3265,7 @@ S2.define('select2/data/select',[
|
||||
if ($(data.element).is('option')) {
|
||||
data.element.selected = false;
|
||||
|
||||
this.$element.trigger('change');
|
||||
this.$element.trigger('input').trigger('change');
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -3136,7 +3283,7 @@ S2.define('select2/data/select',[
|
||||
|
||||
self.$element.val(val);
|
||||
|
||||
self.$element.trigger('change');
|
||||
self.$element.trigger('input').trigger('change');
|
||||
});
|
||||
};
|
||||
|
||||
@@ -3158,7 +3305,7 @@ S2.define('select2/data/select',[
|
||||
// Remove anything added to child elements
|
||||
this.$element.find('*').each(function () {
|
||||
// Remove any custom data set by Select2
|
||||
$.removeData(this, 'data');
|
||||
Utils.RemoveData(this);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -3231,7 +3378,7 @@ S2.define('select2/data/select',[
|
||||
normalizedData.element = option;
|
||||
|
||||
// Override the option's data with the combined data
|
||||
$.data(option, 'data', normalizedData);
|
||||
Utils.StoreData(option, 'data', normalizedData);
|
||||
|
||||
return $option;
|
||||
};
|
||||
@@ -3239,7 +3386,7 @@ S2.define('select2/data/select',[
|
||||
SelectAdapter.prototype.item = function ($option) {
|
||||
var data = {};
|
||||
|
||||
data = $.data($option[0], 'data');
|
||||
data = Utils.GetData($option[0], 'data');
|
||||
|
||||
if (data != null) {
|
||||
return data;
|
||||
@@ -3277,13 +3424,13 @@ S2.define('select2/data/select',[
|
||||
data = this._normalizeItem(data);
|
||||
data.element = $option[0];
|
||||
|
||||
$.data($option[0], 'data', data);
|
||||
Utils.StoreData($option[0], 'data', data);
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
SelectAdapter.prototype._normalizeItem = function (item) {
|
||||
if (!$.isPlainObject(item)) {
|
||||
if (item !== Object(item)) {
|
||||
item = {
|
||||
id: item,
|
||||
text: item
|
||||
@@ -3329,15 +3476,19 @@ S2.define('select2/data/array',[
|
||||
'jquery'
|
||||
], function (SelectAdapter, Utils, $) {
|
||||
function ArrayAdapter ($element, options) {
|
||||
var data = options.get('data') || [];
|
||||
this._dataToConvert = options.get('data') || [];
|
||||
|
||||
ArrayAdapter.__super__.constructor.call(this, $element, options);
|
||||
|
||||
this.addOptions(this.convertToOptions(data));
|
||||
}
|
||||
|
||||
Utils.Extend(ArrayAdapter, SelectAdapter);
|
||||
|
||||
ArrayAdapter.prototype.bind = function (container, $container) {
|
||||
ArrayAdapter.__super__.bind.call(this, container, $container);
|
||||
|
||||
this.addOptions(this.convertToOptions(this._dataToConvert));
|
||||
};
|
||||
|
||||
ArrayAdapter.prototype.select = function (data) {
|
||||
var $option = this.$element.find('option').filter(function (i, elm) {
|
||||
return elm.value == data.id.toString();
|
||||
@@ -3487,7 +3638,8 @@ S2.define('select2/data/ajax',[
|
||||
}, function () {
|
||||
// Attempt to detect if a request was aborted
|
||||
// Only works if the transport exposes a status property
|
||||
if ($request.status && $request.status === '0') {
|
||||
if ('status' in $request &&
|
||||
($request.status === 0 || $request.status === '0')) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -3626,8 +3778,6 @@ S2.define('select2/data/tags',[
|
||||
};
|
||||
|
||||
Tags.prototype._removeOldTags = function (_) {
|
||||
var tag = this._lastTag;
|
||||
|
||||
var $options = this.$element.find('option[data-select2-tag]');
|
||||
|
||||
$options.each(function () {
|
||||
@@ -3702,7 +3852,7 @@ S2.define('select2/data/tokenizer',[
|
||||
// Replace the search term if we have the search box
|
||||
if (this.$search.length) {
|
||||
this.$search.val(tokenData.term);
|
||||
this.$search.focus();
|
||||
this.$search.trigger('focus');
|
||||
}
|
||||
|
||||
params.term = tokenData.term;
|
||||
@@ -3831,10 +3981,30 @@ S2.define('select2/data/maximumSelectionLength',[
|
||||
decorated.call(this, $e, options);
|
||||
}
|
||||
|
||||
MaximumSelectionLength.prototype.bind =
|
||||
function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
container.on('select', function () {
|
||||
self._checkIfMaximumSelected();
|
||||
});
|
||||
};
|
||||
|
||||
MaximumSelectionLength.prototype.query =
|
||||
function (decorated, params, callback) {
|
||||
var self = this;
|
||||
|
||||
this._checkIfMaximumSelected(function () {
|
||||
decorated.call(self, params, callback);
|
||||
});
|
||||
};
|
||||
|
||||
MaximumSelectionLength.prototype._checkIfMaximumSelected =
|
||||
function (_, successCallback) {
|
||||
var self = this;
|
||||
|
||||
this.current(function (currentData) {
|
||||
var count = currentData != null ? currentData.length : 0;
|
||||
if (self.maximumSelectionLength > 0 &&
|
||||
@@ -3847,7 +4017,10 @@ S2.define('select2/data/maximumSelectionLength',[
|
||||
});
|
||||
return;
|
||||
}
|
||||
decorated.call(self, params, callback);
|
||||
|
||||
if (successCallback) {
|
||||
successCallback();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -3886,7 +4059,7 @@ S2.define('select2/dropdown',[
|
||||
};
|
||||
|
||||
Dropdown.prototype.position = function ($dropdown, $container) {
|
||||
// Should be implmented in subclasses
|
||||
// Should be implemented in subclasses
|
||||
};
|
||||
|
||||
Dropdown.prototype.destroy = function () {
|
||||
@@ -3910,7 +4083,7 @@ S2.define('select2/dropdown/search',[
|
||||
'<span class="select2-search select2-search--dropdown">' +
|
||||
'<input class="select2-search__field" type="search" tabindex="-1"' +
|
||||
' autocomplete="off" autocorrect="off" autocapitalize="none"' +
|
||||
' spellcheck="false" role="textbox" />' +
|
||||
' spellcheck="false" role="searchbox" aria-autocomplete="list" />' +
|
||||
'</span>'
|
||||
);
|
||||
|
||||
@@ -3925,6 +4098,8 @@ S2.define('select2/dropdown/search',[
|
||||
Search.prototype.bind = function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
var resultsId = container.id + '-results';
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
this.$search.on('keydown', function (evt) {
|
||||
@@ -3947,23 +4122,27 @@ S2.define('select2/dropdown/search',[
|
||||
|
||||
container.on('open', function () {
|
||||
self.$search.attr('tabindex', 0);
|
||||
self.$search.attr('aria-controls', resultsId);
|
||||
|
||||
self.$search.focus();
|
||||
self.$search.trigger('focus');
|
||||
|
||||
window.setTimeout(function () {
|
||||
self.$search.focus();
|
||||
self.$search.trigger('focus');
|
||||
}, 0);
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
self.$search.attr('tabindex', -1);
|
||||
self.$search.removeAttr('aria-controls');
|
||||
self.$search.removeAttr('aria-activedescendant');
|
||||
|
||||
self.$search.val('');
|
||||
self.$search.trigger('blur');
|
||||
});
|
||||
|
||||
container.on('focus', function () {
|
||||
if (!container.isOpen()) {
|
||||
self.$search.focus();
|
||||
self.$search.trigger('focus');
|
||||
}
|
||||
});
|
||||
|
||||
@@ -3978,6 +4157,14 @@ S2.define('select2/dropdown/search',[
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
container.on('results:focus', function (params) {
|
||||
if (params.data._resultId) {
|
||||
self.$search.attr('aria-activedescendant', params.data._resultId);
|
||||
} else {
|
||||
self.$search.removeAttr('aria-activedescendant');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Search.prototype.handleSearch = function (evt) {
|
||||
@@ -4062,6 +4249,7 @@ S2.define('select2/dropdown/infiniteScroll',[
|
||||
|
||||
if (this.showLoadingMore(data)) {
|
||||
this.$results.append(this.$loadingMore);
|
||||
this.loadMoreIfNeeded();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -4080,25 +4268,27 @@ S2.define('select2/dropdown/infiniteScroll',[
|
||||
self.loading = true;
|
||||
});
|
||||
|
||||
this.$results.on('scroll', function () {
|
||||
var isLoadMoreVisible = $.contains(
|
||||
document.documentElement,
|
||||
self.$loadingMore[0]
|
||||
);
|
||||
this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));
|
||||
};
|
||||
|
||||
if (self.loading || !isLoadMoreVisible) {
|
||||
return;
|
||||
}
|
||||
InfiniteScroll.prototype.loadMoreIfNeeded = function () {
|
||||
var isLoadMoreVisible = $.contains(
|
||||
document.documentElement,
|
||||
this.$loadingMore[0]
|
||||
);
|
||||
|
||||
var currentOffset = self.$results.offset().top +
|
||||
self.$results.outerHeight(false);
|
||||
var loadingMoreOffset = self.$loadingMore.offset().top +
|
||||
self.$loadingMore.outerHeight(false);
|
||||
if (this.loading || !isLoadMoreVisible) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentOffset + 50 >= loadingMoreOffset) {
|
||||
self.loadMore();
|
||||
}
|
||||
});
|
||||
var currentOffset = this.$results.offset().top +
|
||||
this.$results.outerHeight(false);
|
||||
var loadingMoreOffset = this.$loadingMore.offset().top +
|
||||
this.$loadingMore.outerHeight(false);
|
||||
|
||||
if (currentOffset + 50 >= loadingMoreOffset) {
|
||||
this.loadMore();
|
||||
}
|
||||
};
|
||||
|
||||
InfiniteScroll.prototype.loadMore = function () {
|
||||
@@ -4119,7 +4309,7 @@ S2.define('select2/dropdown/infiniteScroll',[
|
||||
var $option = $(
|
||||
'<li ' +
|
||||
'class="select2-results__option select2-results__option--load-more"' +
|
||||
'role="treeitem" aria-disabled="true"></li>'
|
||||
'role="option" aria-disabled="true"></li>'
|
||||
);
|
||||
|
||||
var message = this.options.get('translations').get('loadingMore');
|
||||
@@ -4137,7 +4327,7 @@ S2.define('select2/dropdown/attachBody',[
|
||||
'../utils'
|
||||
], function ($, Utils) {
|
||||
function AttachBody (decorated, $element, options) {
|
||||
this.$dropdownParent = options.get('dropdownParent') || $(document.body);
|
||||
this.$dropdownParent = $(options.get('dropdownParent') || document.body);
|
||||
|
||||
decorated.call(this, $element, options);
|
||||
}
|
||||
@@ -4145,27 +4335,14 @@ S2.define('select2/dropdown/attachBody',[
|
||||
AttachBody.prototype.bind = function (decorated, container, $container) {
|
||||
var self = this;
|
||||
|
||||
var setupResultsEvents = false;
|
||||
|
||||
decorated.call(this, container, $container);
|
||||
|
||||
container.on('open', function () {
|
||||
self._showDropdown();
|
||||
self._attachPositioningHandler(container);
|
||||
|
||||
if (!setupResultsEvents) {
|
||||
setupResultsEvents = true;
|
||||
|
||||
container.on('results:all', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('results:append', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
}
|
||||
// Must bind after the results handlers to ensure correct sizing
|
||||
self._bindContainerResultHandlers(container);
|
||||
});
|
||||
|
||||
container.on('close', function () {
|
||||
@@ -4214,6 +4391,44 @@ S2.define('select2/dropdown/attachBody',[
|
||||
this.$dropdownContainer.detach();
|
||||
};
|
||||
|
||||
AttachBody.prototype._bindContainerResultHandlers =
|
||||
function (decorated, container) {
|
||||
|
||||
// These should only be bound once
|
||||
if (this._containerResultsHandlersBound) {
|
||||
return;
|
||||
}
|
||||
|
||||
var self = this;
|
||||
|
||||
container.on('results:all', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('results:append', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('results:message', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('select', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
container.on('unselect', function () {
|
||||
self._positionDropdown();
|
||||
self._resizeDropdown();
|
||||
});
|
||||
|
||||
this._containerResultsHandlersBound = true;
|
||||
};
|
||||
|
||||
AttachBody.prototype._attachPositioningHandler =
|
||||
function (decorated, container) {
|
||||
var self = this;
|
||||
@@ -4224,14 +4439,14 @@ S2.define('select2/dropdown/attachBody',[
|
||||
|
||||
var $watchers = this.$container.parents().filter(Utils.hasScroll);
|
||||
$watchers.each(function () {
|
||||
$(this).data('select2-scroll-position', {
|
||||
Utils.StoreData(this, 'select2-scroll-position', {
|
||||
x: $(this).scrollLeft(),
|
||||
y: $(this).scrollTop()
|
||||
});
|
||||
});
|
||||
|
||||
$watchers.on(scrollEvent, function (ev) {
|
||||
var position = $(this).data('select2-scroll-position');
|
||||
var position = Utils.GetData(this, 'select2-scroll-position');
|
||||
$(this).scrollTop(position.y);
|
||||
});
|
||||
|
||||
@@ -4290,16 +4505,26 @@ S2.define('select2/dropdown/attachBody',[
|
||||
top: container.bottom
|
||||
};
|
||||
|
||||
// Determine what the parent element is to use for calciulating the offset
|
||||
// Determine what the parent element is to use for calculating the offset
|
||||
var $offsetParent = this.$dropdownParent;
|
||||
|
||||
// For statically positoned elements, we need to get the element
|
||||
// For statically positioned elements, we need to get the element
|
||||
// that is determining the offset
|
||||
if ($offsetParent.css('position') === 'static') {
|
||||
$offsetParent = $offsetParent.offsetParent();
|
||||
}
|
||||
|
||||
var parentOffset = $offsetParent.offset();
|
||||
var parentOffset = {
|
||||
top: 0,
|
||||
left: 0
|
||||
};
|
||||
|
||||
if (
|
||||
$.contains(document.body, $offsetParent[0]) ||
|
||||
$offsetParent[0].isConnected
|
||||
) {
|
||||
parentOffset = $offsetParent.offset();
|
||||
}
|
||||
|
||||
css.top -= parentOffset.top;
|
||||
css.left -= parentOffset.left;
|
||||
@@ -4396,8 +4621,8 @@ S2.define('select2/dropdown/minimumResultsForSearch',[
|
||||
});
|
||||
|
||||
S2.define('select2/dropdown/selectOnClose',[
|
||||
|
||||
], function () {
|
||||
'../utils'
|
||||
], function (Utils) {
|
||||
function SelectOnClose () { }
|
||||
|
||||
SelectOnClose.prototype.bind = function (decorated, container, $container) {
|
||||
@@ -4428,7 +4653,7 @@ S2.define('select2/dropdown/selectOnClose',[
|
||||
return;
|
||||
}
|
||||
|
||||
var data = $highlightedResults.data('data');
|
||||
var data = Utils.GetData($highlightedResults[0], 'data');
|
||||
|
||||
// Don't re-select already selected resulte
|
||||
if (
|
||||
@@ -4469,7 +4694,7 @@ S2.define('select2/dropdown/closeOnSelect',[
|
||||
var originalEvent = evt.originalEvent;
|
||||
|
||||
// Don't close if the control key is being held
|
||||
if (originalEvent && originalEvent.ctrlKey) {
|
||||
if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4523,6 +4748,9 @@ S2.define('select2/i18n/en',[],function () {
|
||||
},
|
||||
searching: function () {
|
||||
return 'Searching…';
|
||||
},
|
||||
removeAllItems: function () {
|
||||
return 'Remove all items';
|
||||
}
|
||||
};
|
||||
});
|
||||
@@ -4761,66 +4989,29 @@ S2.define('select2/defaults',[
|
||||
);
|
||||
}
|
||||
|
||||
if (typeof options.language === 'string') {
|
||||
// Check if the language is specified with a region
|
||||
if (options.language.indexOf('-') > 0) {
|
||||
// Extract the region information if it is included
|
||||
var languageParts = options.language.split('-');
|
||||
var baseLanguage = languageParts[0];
|
||||
// If the defaults were not previously applied from an element, it is
|
||||
// possible for the language option to have not been resolved
|
||||
options.language = this._resolveLanguage(options.language);
|
||||
|
||||
options.language = [options.language, baseLanguage];
|
||||
} else {
|
||||
options.language = [options.language];
|
||||
// Always fall back to English since it will always be complete
|
||||
options.language.push('en');
|
||||
|
||||
var uniqueLanguages = [];
|
||||
|
||||
for (var l = 0; l < options.language.length; l++) {
|
||||
var language = options.language[l];
|
||||
|
||||
if (uniqueLanguages.indexOf(language) === -1) {
|
||||
uniqueLanguages.push(language);
|
||||
}
|
||||
}
|
||||
|
||||
if ($.isArray(options.language)) {
|
||||
var languages = new Translation();
|
||||
options.language.push('en');
|
||||
options.language = uniqueLanguages;
|
||||
|
||||
var languageNames = options.language;
|
||||
|
||||
for (var l = 0; l < languageNames.length; l++) {
|
||||
var name = languageNames[l];
|
||||
var language = {};
|
||||
|
||||
try {
|
||||
// Try to load it with the original name
|
||||
language = Translation.loadPath(name);
|
||||
} catch (e) {
|
||||
try {
|
||||
// If we couldn't load it, check if it wasn't the full path
|
||||
name = this.defaults.amdLanguageBase + name;
|
||||
language = Translation.loadPath(name);
|
||||
} catch (ex) {
|
||||
// The translation could not be loaded at all. Sometimes this is
|
||||
// because of a configuration problem, other times this can be
|
||||
// because of how Select2 helps load all possible translation files.
|
||||
if (options.debug && window.console && console.warn) {
|
||||
console.warn(
|
||||
'Select2: The language file for "' + name + '" could not be ' +
|
||||
'automatically loaded. A fallback will be used instead.'
|
||||
);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
languages.extend(language);
|
||||
}
|
||||
|
||||
options.translations = languages;
|
||||
} else {
|
||||
var baseTranslation = Translation.loadPath(
|
||||
this.defaults.amdLanguageBase + 'en'
|
||||
);
|
||||
var customTranslation = new Translation(options.language);
|
||||
|
||||
customTranslation.extend(baseTranslation);
|
||||
|
||||
options.translations = customTranslation;
|
||||
}
|
||||
options.translations = this._processTranslations(
|
||||
options.language,
|
||||
options.debug
|
||||
);
|
||||
|
||||
return options;
|
||||
};
|
||||
@@ -4887,13 +5078,14 @@ S2.define('select2/defaults',[
|
||||
debug: false,
|
||||
dropdownAutoWidth: false,
|
||||
escapeMarkup: Utils.escapeMarkup,
|
||||
language: EnglishTranslation,
|
||||
language: {},
|
||||
matcher: matcher,
|
||||
minimumInputLength: 0,
|
||||
maximumInputLength: 0,
|
||||
maximumSelectionLength: 0,
|
||||
minimumResultsForSearch: 0,
|
||||
selectOnClose: false,
|
||||
scrollAfterSelect: false,
|
||||
sorter: function (data) {
|
||||
return data;
|
||||
},
|
||||
@@ -4908,6 +5100,103 @@ S2.define('select2/defaults',[
|
||||
};
|
||||
};
|
||||
|
||||
Defaults.prototype.applyFromElement = function (options, $element) {
|
||||
var optionLanguage = options.language;
|
||||
var defaultLanguage = this.defaults.language;
|
||||
var elementLanguage = $element.prop('lang');
|
||||
var parentLanguage = $element.closest('[lang]').prop('lang');
|
||||
|
||||
var languages = Array.prototype.concat.call(
|
||||
this._resolveLanguage(elementLanguage),
|
||||
this._resolveLanguage(optionLanguage),
|
||||
this._resolveLanguage(defaultLanguage),
|
||||
this._resolveLanguage(parentLanguage)
|
||||
);
|
||||
|
||||
options.language = languages;
|
||||
|
||||
return options;
|
||||
};
|
||||
|
||||
Defaults.prototype._resolveLanguage = function (language) {
|
||||
if (!language) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($.isEmptyObject(language)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($.isPlainObject(language)) {
|
||||
return [language];
|
||||
}
|
||||
|
||||
var languages;
|
||||
|
||||
if (!$.isArray(language)) {
|
||||
languages = [language];
|
||||
} else {
|
||||
languages = language;
|
||||
}
|
||||
|
||||
var resolvedLanguages = [];
|
||||
|
||||
for (var l = 0; l < languages.length; l++) {
|
||||
resolvedLanguages.push(languages[l]);
|
||||
|
||||
if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {
|
||||
// Extract the region information if it is included
|
||||
var languageParts = languages[l].split('-');
|
||||
var baseLanguage = languageParts[0];
|
||||
|
||||
resolvedLanguages.push(baseLanguage);
|
||||
}
|
||||
}
|
||||
|
||||
return resolvedLanguages;
|
||||
};
|
||||
|
||||
Defaults.prototype._processTranslations = function (languages, debug) {
|
||||
var translations = new Translation();
|
||||
|
||||
for (var l = 0; l < languages.length; l++) {
|
||||
var languageData = new Translation();
|
||||
|
||||
var language = languages[l];
|
||||
|
||||
if (typeof language === 'string') {
|
||||
try {
|
||||
// Try to load it with the original name
|
||||
languageData = Translation.loadPath(language);
|
||||
} catch (e) {
|
||||
try {
|
||||
// If we couldn't load it, check if it wasn't the full path
|
||||
language = this.defaults.amdLanguageBase + language;
|
||||
languageData = Translation.loadPath(language);
|
||||
} catch (ex) {
|
||||
// The translation could not be loaded at all. Sometimes this is
|
||||
// because of a configuration problem, other times this can be
|
||||
// because of how Select2 helps load all possible translation files
|
||||
if (debug && window.console && console.warn) {
|
||||
console.warn(
|
||||
'Select2: The language file for "' + language + '" could ' +
|
||||
'not be automatically loaded. A fallback will be used instead.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if ($.isPlainObject(language)) {
|
||||
languageData = new Translation(language);
|
||||
} else {
|
||||
languageData = language;
|
||||
}
|
||||
|
||||
translations.extend(languageData);
|
||||
}
|
||||
|
||||
return translations;
|
||||
};
|
||||
|
||||
Defaults.prototype.set = function (key, value) {
|
||||
var camelKey = $.camelCase(key);
|
||||
|
||||
@@ -4916,7 +5205,7 @@ S2.define('select2/defaults',[
|
||||
|
||||
var convertedData = Utils._convertData(data);
|
||||
|
||||
$.extend(this.defaults, convertedData);
|
||||
$.extend(true, this.defaults, convertedData);
|
||||
};
|
||||
|
||||
var defaults = new Defaults();
|
||||
@@ -4937,6 +5226,10 @@ S2.define('select2/options',[
|
||||
this.fromElement($element);
|
||||
}
|
||||
|
||||
if ($element != null) {
|
||||
this.options = Defaults.applyFromElement(this.options, $element);
|
||||
}
|
||||
|
||||
this.options = Defaults.apply(this.options);
|
||||
|
||||
if ($element && $element.is('input')) {
|
||||
@@ -4960,14 +5253,6 @@ S2.define('select2/options',[
|
||||
this.options.disabled = $e.prop('disabled');
|
||||
}
|
||||
|
||||
if (this.options.language == null) {
|
||||
if ($e.prop('lang')) {
|
||||
this.options.language = $e.prop('lang').toLowerCase();
|
||||
} else if ($e.closest('[lang]').prop('lang')) {
|
||||
this.options.language = $e.closest('[lang]').prop('lang');
|
||||
}
|
||||
}
|
||||
|
||||
if (this.options.dir == null) {
|
||||
if ($e.prop('dir')) {
|
||||
this.options.dir = $e.prop('dir');
|
||||
@@ -4981,7 +5266,7 @@ S2.define('select2/options',[
|
||||
$e.prop('disabled', this.options.disabled);
|
||||
$e.prop('multiple', this.options.multiple);
|
||||
|
||||
if ($e.data('select2Tags')) {
|
||||
if (Utils.GetData($e[0], 'select2Tags')) {
|
||||
if (this.options.debug && window.console && console.warn) {
|
||||
console.warn(
|
||||
'Select2: The `data-select2-tags` attribute has been changed to ' +
|
||||
@@ -4990,11 +5275,11 @@ S2.define('select2/options',[
|
||||
);
|
||||
}
|
||||
|
||||
$e.data('data', $e.data('select2Tags'));
|
||||
$e.data('tags', true);
|
||||
Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));
|
||||
Utils.StoreData($e[0], 'tags', true);
|
||||
}
|
||||
|
||||
if ($e.data('ajaxUrl')) {
|
||||
if (Utils.GetData($e[0], 'ajaxUrl')) {
|
||||
if (this.options.debug && window.console && console.warn) {
|
||||
console.warn(
|
||||
'Select2: The `data-ajax-url` attribute has been changed to ' +
|
||||
@@ -5003,21 +5288,45 @@ S2.define('select2/options',[
|
||||
);
|
||||
}
|
||||
|
||||
$e.attr('ajax--url', $e.data('ajaxUrl'));
|
||||
$e.data('ajax--url', $e.data('ajaxUrl'));
|
||||
$e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));
|
||||
Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));
|
||||
}
|
||||
|
||||
var dataset = {};
|
||||
|
||||
function upperCaseLetter(_, letter) {
|
||||
return letter.toUpperCase();
|
||||
}
|
||||
|
||||
// Pre-load all of the attributes which are prefixed with `data-`
|
||||
for (var attr = 0; attr < $e[0].attributes.length; attr++) {
|
||||
var attributeName = $e[0].attributes[attr].name;
|
||||
var prefix = 'data-';
|
||||
|
||||
if (attributeName.substr(0, prefix.length) == prefix) {
|
||||
// Get the contents of the attribute after `data-`
|
||||
var dataName = attributeName.substring(prefix.length);
|
||||
|
||||
// Get the data contents from the consistent source
|
||||
// This is more than likely the jQuery data helper
|
||||
var dataValue = Utils.GetData($e[0], dataName);
|
||||
|
||||
// camelCase the attribute name to match the spec
|
||||
var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);
|
||||
|
||||
// Store the data attribute contents into the dataset since
|
||||
dataset[camelDataName] = dataValue;
|
||||
}
|
||||
}
|
||||
|
||||
// Prefer the element's `dataset` attribute if it exists
|
||||
// jQuery 1.x does not correctly handle data attributes with multiple dashes
|
||||
if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {
|
||||
dataset = $.extend(true, {}, $e[0].dataset, $e.data());
|
||||
} else {
|
||||
dataset = $e.data();
|
||||
dataset = $.extend(true, {}, $e[0].dataset, dataset);
|
||||
}
|
||||
|
||||
var data = $.extend(true, {}, dataset);
|
||||
// Prefer our internal data cache if it exists
|
||||
var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);
|
||||
|
||||
data = Utils._convertData(data);
|
||||
|
||||
@@ -5054,8 +5363,8 @@ S2.define('select2/core',[
|
||||
'./keys'
|
||||
], function ($, Options, Utils, KEYS) {
|
||||
var Select2 = function ($element, options) {
|
||||
if ($element.data('select2') != null) {
|
||||
$element.data('select2').destroy();
|
||||
if (Utils.GetData($element[0], 'select2') != null) {
|
||||
Utils.GetData($element[0], 'select2').destroy();
|
||||
}
|
||||
|
||||
this.$element = $element;
|
||||
@@ -5071,7 +5380,7 @@ S2.define('select2/core',[
|
||||
// Set up the tabindex
|
||||
|
||||
var tabindex = $element.attr('tabindex') || 0;
|
||||
$element.data('old-tabindex', tabindex);
|
||||
Utils.StoreData($element[0], 'old-tabindex', tabindex);
|
||||
$element.attr('tabindex', '-1');
|
||||
|
||||
// Set up containers and adapters
|
||||
@@ -5132,6 +5441,9 @@ S2.define('select2/core',[
|
||||
// Synchronize any monitored attributes
|
||||
this._syncAttributes();
|
||||
|
||||
Utils.StoreData($element[0], 'select2', this);
|
||||
|
||||
// Ensure backwards compatibility with $element.data('select2').
|
||||
$element.data('select2', this);
|
||||
};
|
||||
|
||||
@@ -5208,6 +5520,12 @@ S2.define('select2/core',[
|
||||
return null;
|
||||
}
|
||||
|
||||
if (method == 'computedstyle') {
|
||||
var computedStyle = window.getComputedStyle($element[0]);
|
||||
|
||||
return computedStyle.width;
|
||||
}
|
||||
|
||||
return method;
|
||||
};
|
||||
|
||||
@@ -5248,8 +5566,8 @@ S2.define('select2/core',[
|
||||
|
||||
if (observer != null) {
|
||||
this._observer = new observer(function (mutations) {
|
||||
$.each(mutations, self._syncA);
|
||||
$.each(mutations, self._syncS);
|
||||
self._syncA();
|
||||
self._syncS(null, mutations);
|
||||
});
|
||||
this._observer.observe(this.$element[0], {
|
||||
attributes: true,
|
||||
@@ -5371,7 +5689,7 @@ S2.define('select2/core',[
|
||||
if (self.isOpen()) {
|
||||
if (key === KEYS.ESC || key === KEYS.TAB ||
|
||||
(key === KEYS.UP && evt.altKey)) {
|
||||
self.close();
|
||||
self.close(evt);
|
||||
|
||||
evt.preventDefault();
|
||||
} else if (key === KEYS.ENTER) {
|
||||
@@ -5405,7 +5723,7 @@ S2.define('select2/core',[
|
||||
Select2.prototype._syncAttributes = function () {
|
||||
this.options.set('disabled', this.$element.prop('disabled'));
|
||||
|
||||
if (this.options.get('disabled')) {
|
||||
if (this.isDisabled()) {
|
||||
if (this.isOpen()) {
|
||||
this.close();
|
||||
}
|
||||
@@ -5416,7 +5734,7 @@ S2.define('select2/core',[
|
||||
}
|
||||
};
|
||||
|
||||
Select2.prototype._syncSubtree = function (evt, mutations) {
|
||||
Select2.prototype._isChangeMutation = function (evt, mutations) {
|
||||
var changed = false;
|
||||
var self = this;
|
||||
|
||||
@@ -5444,7 +5762,22 @@ S2.define('select2/core',[
|
||||
}
|
||||
} else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
|
||||
changed = true;
|
||||
} else if ($.isArray(mutations)) {
|
||||
$.each(mutations, function(evt, mutation) {
|
||||
if (self._isChangeMutation(evt, mutation)) {
|
||||
// We've found a change mutation.
|
||||
// Let's escape from the loop and continue
|
||||
changed = true;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
return changed;
|
||||
};
|
||||
|
||||
Select2.prototype._syncSubtree = function (evt, mutations) {
|
||||
var changed = this._isChangeMutation(evt, mutations);
|
||||
var self = this;
|
||||
|
||||
// Only re-pull the data if we think there is a change
|
||||
if (changed) {
|
||||
@@ -5466,7 +5799,8 @@ S2.define('select2/core',[
|
||||
'open': 'opening',
|
||||
'close': 'closing',
|
||||
'select': 'selecting',
|
||||
'unselect': 'unselecting'
|
||||
'unselect': 'unselecting',
|
||||
'clear': 'clearing'
|
||||
};
|
||||
|
||||
if (args === undefined) {
|
||||
@@ -5494,7 +5828,7 @@ S2.define('select2/core',[
|
||||
};
|
||||
|
||||
Select2.prototype.toggleDropdown = function () {
|
||||
if (this.options.get('disabled')) {
|
||||
if (this.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5510,15 +5844,40 @@ S2.define('select2/core',[
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.trigger('query', {});
|
||||
};
|
||||
|
||||
Select2.prototype.close = function () {
|
||||
Select2.prototype.close = function (evt) {
|
||||
if (!this.isOpen()) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.trigger('close', {});
|
||||
this.trigger('close', { originalEvent : evt });
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper method to abstract the "enabled" (not "disabled") state of this
|
||||
* object.
|
||||
*
|
||||
* @return {true} if the instance is not disabled.
|
||||
* @return {false} if the instance is disabled.
|
||||
*/
|
||||
Select2.prototype.isEnabled = function () {
|
||||
return !this.isDisabled();
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper method to abstract the "disabled" state of this object.
|
||||
*
|
||||
* @return {true} if the disabled option is true.
|
||||
* @return {false} if the disabled option is false.
|
||||
*/
|
||||
Select2.prototype.isDisabled = function () {
|
||||
return this.options.get('disabled');
|
||||
};
|
||||
|
||||
Select2.prototype.isOpen = function () {
|
||||
@@ -5595,7 +5954,7 @@ S2.define('select2/core',[
|
||||
});
|
||||
}
|
||||
|
||||
this.$element.val(newVal).trigger('change');
|
||||
this.$element.val(newVal).trigger('input').trigger('change');
|
||||
};
|
||||
|
||||
Select2.prototype.destroy = function () {
|
||||
@@ -5621,10 +5980,12 @@ S2.define('select2/core',[
|
||||
this._syncS = null;
|
||||
|
||||
this.$element.off('.select2');
|
||||
this.$element.attr('tabindex', this.$element.data('old-tabindex'));
|
||||
this.$element.attr('tabindex',
|
||||
Utils.GetData(this.$element[0], 'old-tabindex'));
|
||||
|
||||
this.$element.removeClass('select2-hidden-accessible');
|
||||
this.$element.attr('aria-hidden', 'false');
|
||||
Utils.RemoveData(this.$element[0]);
|
||||
this.$element.removeData('select2');
|
||||
|
||||
this.dataAdapter.destroy();
|
||||
@@ -5652,7 +6013,7 @@ S2.define('select2/core',[
|
||||
|
||||
this.$container.addClass('select2-container--' + this.options.get('theme'));
|
||||
|
||||
$container.data('element', this.$element);
|
||||
Utils.StoreData($container[0], 'element', this.$element);
|
||||
|
||||
return $container;
|
||||
};
|
||||
@@ -5672,8 +6033,9 @@ S2.define('jquery.select2',[
|
||||
'jquery-mousewheel',
|
||||
|
||||
'./select2/core',
|
||||
'./select2/defaults'
|
||||
], function ($, _, Select2, Defaults) {
|
||||
'./select2/defaults',
|
||||
'./select2/utils'
|
||||
], function ($, _, Select2, Defaults, Utils) {
|
||||
if ($.fn.select2 == null) {
|
||||
// All methods that should return the element
|
||||
var thisMethods = ['open', 'close', 'destroy'];
|
||||
@@ -5694,7 +6056,7 @@ S2.define('jquery.select2',[
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
|
||||
this.each(function () {
|
||||
var instance = $(this).data('select2');
|
||||
var instance = Utils.GetData(this, 'select2');
|
||||
|
||||
if (instance == null && window.console && console.error) {
|
||||
console.error(
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+2
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user