1/* jQuery Nice Select - v1.1.0 2https://github.com/hernansartorio/jquery-nice-select 3Made by Hernán Sartorio */ 4 5(function($) { 6 7 $.fn.niceSelect = function(method) { 8 9 // Methods 10 if (typeof method == 'string') { 11 if (method == 'update') { 12 this.each(function() { 13 var $select = $(this); 14 var $dropdown = $(this).next('.nice-select'); 15 var open = $dropdown.hasClass('open'); 16 17 if ($dropdown.length) { 18 $dropdown.remove(); 19 create_nice_select($select); 20 21 if (open) { 22 $select.next().trigger('click'); 23 } 24 } 25 }); 26 } else if (method == 'destroy') { 27 this.each(function() { 28 var $select = $(this); 29 var $dropdown = $(this).next('.nice-select'); 30 31 if ($dropdown.length) { 32 $dropdown.remove(); 33 $select.css('display', ''); 34 } 35 }); 36 if ($('.nice-select').length == 0) { 37 $(document).off('.nice_select'); 38 } 39 } else { 40 console.log('Method "' + method + '" does not exist.') 41 } 42 return this; 43 } 44 45 // Hide native select 46 this.hide(); 47 48 // Create custom markup 49 this.each(function() { 50 var $select = $(this); 51 52 if (!$select.next().hasClass('nice-select')) { 53 create_nice_select($select); 54 } 55 }); 56 57 function create_nice_select($select) { 58 $select.after($('<div></div>') 59 .addClass('nice-select') 60 .addClass($select.attr('class') || '') 61 .addClass($select.attr('disabled') ? 'disabled' : '') 62 .addClass($select.attr('multiple') ? 'has-multiple' : '') 63 .attr('tabindex', $select.attr('disabled') ? null : '0') 64 .html($select.attr('multiple') ? '<span class="multiple-options"></span><div class="nice-select-search-box"><input type="text" class="nice-select-search" placeholder="Recherche..."/></div><ul class="list"></ul>' : '<span class="current"></span><div class="nice-select-search-box"><input type="text" class="nice-select-search" placeholder="Recherche..."/></div><ul class="list"></ul>') 65 ); 66 67 var $dropdown = $select.next(); 68 var $options = $select.find('option'); 69 if ($select.attr('multiple')) { 70 var $selected = $select.find('option:selected'); 71 var $selected_html = ''; 72 $selected.each(function() { 73 $selected_option = $(this); 74 $selected_text = $selected_option.data('display') || $selected_option.text(); 75 76 if (!$selected_option.val()) { 77 return; 78 } 79 80 $selected_html += '<span class="current">' + $selected_text + '</span>'; 81 }); 82 $select_placeholder = $select.data('js-placeholder') || $select.attr('js-placeholder'); 83 $select_placeholder = !$select_placeholder ? 'Sélectionnez un ou plusieurs éléments' : $select_placeholder; 84 //console.log($select_placeholder); 85 $selected_html = $selected_html === '' ? $select_placeholder : $selected_html; 86 $dropdown.find('.multiple-options').html($selected_html); 87 } else { 88 var $selected = $select.find('option:selected'); 89 $dropdown.find('.current').html($selected.data('display') || $selected.text()); 90 } 91 92 93 $options.each(function(i) { 94 var $option = $(this); 95 var display = $option.data('display'); 96 97 $dropdown.find('ul').append($('<li></li>') 98 .attr('data-value', $option.val()) 99 .attr('data-display', (display || null)) 100 .addClass('option' + 101 ($option.is(':selected') ? ' selected' : '') + 102 ($option.is(':disabled') ? ' disabled' : '')) 103 .html($option.text()) 104 ); 105 }); 106 } 107 108 /* Event listeners */ 109 110 // Unbind existing events in case that the plugin has been initialized before 111 $(document).off('.nice_select'); 112 113 // Open/close 114 $(document).on('click.nice_select', '.nice-select', function(event) { 115 var $dropdown = $(this); 116 117 $('.nice-select').not($dropdown).removeClass('open'); 118 $dropdown.toggleClass('open'); 119 120 if ($dropdown.hasClass('open')) { 121 $dropdown.find('.option'); 122 $dropdown.find('.nice-select-search').val(''); 123 $dropdown.find('.nice-select-search').focus(); 124 $dropdown.find('.focus').removeClass('focus'); 125 $dropdown.find('.selected').addClass('focus'); 126 $dropdown.find('ul li').show(); 127 } else { 128 $dropdown.focus(); 129 } 130 }); 131 132 $(document).on('click', '.nice-select-search-box', function(event) { 133 event.stopPropagation(); 134 return false; 135 }); 136 $(document).on('keyup.nice-select-search', '.nice-select', function() { 137 var $self = $(this); 138 var $text = $self.find('.nice-select-search').val(); 139 var $options = $self.find('ul li'); 140 if ($text == '') 141 $options.show(); 142 else if ($self.hasClass('open')) { 143 $text = $text.toLowerCase(); 144 var $matchReg = new RegExp($text); 145 if (0 < $options.length) { 146 $options.each(function() { 147 var $this = $(this); 148 var $optionText = $this.text().toLowerCase(); 149 var $matchCheck = $matchReg.test($optionText); 150 $matchCheck ? $this.show() : $this.hide(); 151 }) 152 } else { 153 $options.show(); 154 } 155 } 156 $self.find('.option'), 157 $self.find('.focus').removeClass('focus'), 158 $self.find('.selected').addClass('focus'); 159 }); 160 161 // Close when clicking outside 162 $(document).on('click.nice_select', function(event) { 163 if ($(event.target).closest('.nice-select').length === 0) { 164 $('.nice-select').removeClass('open').find('.option'); 165 } 166 }); 167 168 // Option click 169 $(document).on('click.nice_select', '.nice-select .option:not(.disabled)', function(event) { 170 var $option = $(this); 171 var $dropdown = $option.closest('.nice-select'); 172 if ($dropdown.hasClass('has-multiple')) { 173 //console.log('clicked', $option); 174 if ($option.hasClass('selected')) { 175 $option.removeClass('selected'); 176 } else { 177 $option.addClass('selected'); 178 } 179 $selected_html = ''; 180 $selected_values = []; 181 182 $dropdown.find('.selected').each(function() { 183 $selected_option = $(this); 184 var text = $selected_option.data('display') || $selected_option.text(); 185 $selected_html += '<span class="current">
185' + text + '</span>'; 186 $selected_values.push($selected_option.data('value')); 187 }); 188 $select_placeholder = $dropdown.prev('select').data('js-placeholder') || $dropdown.prev('select').attr('js-placeholder'); 189 //console.log($dropdown.prev('select')); 190 $select_placeholder = !$select_placeholder ? 'Sélectionnez un ou plusieurs éléments' : $select_placeholder; 191 $selected_html = $selected_html === '' ? $select_placeholder : $selected_html; 192 $dropdown.find('.multiple-options').html($selected_html); 193 $dropdown.prev('select').val($selected_values).trigger('change'); 194 } else { 195 $dropdown.find('.selected').removeClass('selected'); 196 $option.addClass('selected'); 197 var text = $option.data('display') || $option.text(); 198 $dropdown.find('.current').text(text); 199 $dropdown.prev('select').val($option.data('value')).trigger('change'); 200 } 201 }); 202 203 // Keyboard events 204 $(document).on('keydown.nice_select', '.nice-select', function(event) { 205 var $dropdown = $(this); 206 var $focused_option = $($dropdown.find('.focus') || $dropdown.find('.list .option.selected')); 207 208 // Space or Enter 209 if (event.keyCode == 32 || event.keyCode == 13) { 210 if ($dropdown.hasClass('open')) { 211 $focused_option.trigger('click'); 212 } else { 213 $dropdown.trigger('click'); 214 } 215 return false; 216 // Down 217 } else if (event.keyCode == 40) { 218 if (!$dropdown.hasClass('open')) { 219 $dropdown.trigger('click'); 220 } else { 221 var $next = $focused_option.nextAll('.option:not(.disabled)').first(); 222 if ($next.length > 0) { 223 $dropdown.find('.focus').removeClass('focus'); 224 $next.addClass('focus'); 225 } 226 } 227 return false; 228 // Up 229 } else if (event.keyCode == 38) { 230 if (!$dropdown.hasClass('open')) { 231 $dropdown.trigger('click'); 232 } else { 233 var $prev = $focused_option.prevAll('.option:not(.disabled)').first(); 234 if ($prev.length > 0) { 235 $dropdown.find('.focus').removeClass('focus'); 236 $prev.addClass('focus'); 237 } 238 } 239 return false; 240 // Esc 241 } else if (event.keyCode == 27) { 242 if ($dropdown.hasClass('open')) { 243 $dropdown.trigger('click'); 244 } 245 // Tab 246 } else if (event.keyCode == 9) { 247 if ($dropdown.hasClass('open')) { 248 return false; 249 } 250 } 251 }); 252 253 // Detect CSS pointer-events support, for IE <= 10. From Modernizr. 254 var style = document.createElement('a').style; 255 style.cssText = 'pointer-events:auto'; 256 if (style.pointerEvents !== 'auto') { 257 $('html').addClass('no-csspointerevents'); 258 } 259 260 return this; 261 262 }; 263 264}(jQuery));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.