43 lines
1.5 KiB
JavaScript
43 lines
1.5 KiB
JavaScript
import $ from 'jquery';
|
|
import Selectize from 'selectize';
|
|
|
|
Selectize.define('option_click', function(options) {
|
|
const self = this;
|
|
const setup = self.setup;
|
|
this.setup = function() {
|
|
setup.apply(self, arguments);
|
|
let clicking = false;
|
|
|
|
// Detect click on a .clickable
|
|
self.$dropdown_content.on('mousedown click', function(e) {
|
|
const target = $(e.target);
|
|
if (target.hasClass('clickable') || target.closest('.clickable').length) {
|
|
if (e.type === 'mousedown') {
|
|
clicking = true;
|
|
self.isFocused = false; // awful hack to defuse the document mousedown listener
|
|
} else {
|
|
self.isFocused = true;
|
|
setTimeout(function() {
|
|
clicking = false; // wait until blur has been preempted
|
|
});
|
|
}
|
|
} else { // cleanup in case user right-clicked or dragged off the element
|
|
clicking = false;
|
|
self.isFocused = true;
|
|
}
|
|
});
|
|
|
|
// Intercept default handlers
|
|
self.$dropdown.off('mousedown click', '[data-selectable]').on('mousedown click', '[data-selectable]', function() {
|
|
if (!clicking) {
|
|
return self.onOptionSelect.apply(self, arguments);
|
|
}
|
|
});
|
|
self.$control_input.off('blur').on('blur', function() {
|
|
if (!clicking) {
|
|
return self.onBlur.apply(self, arguments);
|
|
}
|
|
});
|
|
};
|
|
});
|