autocomplete.js (1660B)
1 ( function ( $, rwmb, i18n ) { 2 'use strict'; 3 4 /** 5 * Transform an input into an autocomplete. 6 */ 7 function transform( e ) { 8 var $this = $( this ), 9 $search = $this.siblings( '.rwmb-autocomplete-search' ), 10 $result = $this.siblings( '.rwmb-autocomplete-results' ), 11 name = $this.attr( 'name' ); 12 13 // If the function is called on cloning, then change the field name and clear all results 14 if ( e.hasOwnProperty( 'type' ) && 'clone' == e.type ) { 15 $result.html( '' ); 16 } 17 18 $search.removeClass( 'ui-autocomplete-input' ).autocomplete( { 19 minLength: 0, 20 source: $this.data( 'options' ), 21 select: function ( event, ui ) { 22 $result.append( 23 '<div class="rwmb-autocomplete-result">' + 24 '<div class="label">' + ( typeof ui.item.excerpt !== 'undefined' ? ui.item.excerpt : ui.item.label ) + '</div>' + 25 '<div class="actions">' + i18n.delete + '</div>' + 26 '<input type="hidden" class="rwmb-autocomplete-value" name="' + name + '" value="' + ui.item.value + '">' + 27 '</div>' 28 ); 29 30 // Reinitialize value. 31 $search.val( '' ).trigger( 'change' ); 32 33 return false; 34 } 35 } ); 36 } 37 38 function deleteSelection( e ) { 39 e.preventDefault(); 40 var $item = $( this ).parent(), 41 $search = $item.parent().siblings( '.rwmb-autocomplete-search' ); 42 43 $item.remove(); 44 $search.trigger( 'change' ); 45 } 46 47 function init( e ) { 48 $( e.target ).find( '.rwmb-autocomplete-wrapper input[type="hidden"]' ).each( transform ); 49 } 50 51 rwmb.$document 52 .on( 'mb_ready', init ) 53 .on( 'clone', '.rwmb-autocomplete', transform ) 54 .on( 'click', '.rwmb-autocomplete-result .actions', deleteSelection ); 55 } )( jQuery, rwmb, RWMB_Autocomplete );