123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 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);
- }
- });
- };
- });
|