Filters:
<div data-behavior="filters"> <p data-behavior="event-toggler"> Filters: <button data-behavior="enable" class="text-blue" style="display: none;"> Turn on Events </button> <button data-behavior="disable" class="text-red"> Turn off Events </button> </p> <p> <select data-behavior="numbers-filter"> <option value="">Select any number</option> <option value="1">1</option> <option value="2">2</option> </select> </p> <p data-behavior="query-filter"> <input type="text" data-behavior-target="query"> <button type="button" data-behavior="submit-query">Search</button> </p> </div>
var NumbersFilter = function( $root ) { var find = function( $root ) { return $.behavior.child( 'numbers-filter' ).of( $root ); }; var mount = function( root ) { find( $root ).on( 'change', function() { var value = $( this ).val(); root.trigger( 'alert', [ 'number', value ] ); }); }; var unmount = function() { find( $root ).off( 'change' ); }; return { mount: mount, unmount: unmount }; }; var QueryFilter = function( root ) { var submitQuery = root.child( 'submit-query' ); var mount = function( filters ) { submitQuery.on( 'click', function( e ) { e.preventDefault(); var value = root.target( 'query' ).val(); filters.trigger( 'alert', [ 'query', value ] ) }) }; var unmount = function() { submitQuery.off( 'click' ) }; return { mount: mount, unmount: unmount }; }; var FiltersComponent = (function() { var filters = $.behavior( 'filters' ); var queryFilter = filters.child( 'query-filter' ); filters.on( 'alert', function( _event, filter, value ) { var filterLabel = 'Filter: ' + filter; if ( value ) return alert( filterLabel + ' | value: ' + value ); console.log( filterLabel + ' | There is nothing to alert. :(' ); }); var mountChildrenComponents = function( filters ) { NumbersFilter( this ).mount( filters ); QueryFilter( queryFilter ).mount( filters ); }; var unmountChildrenComponents = function() { NumbersFilter( this ).unmount(); QueryFilter( queryFilter ).unmount(); }; var mountEventToggler = function( filters ) { filters.child( 'event-toggler' ).ifPresent(function( buttons ) { var disableButton = buttons.child( 'disable' ); var enableButton = buttons.child( 'enable' ); var show = function() { this.show() }; disableButton.on( 'click', function() { if ( confirm( 'Are you sure?' ) ) { $( this ).hide(); filters.ifPresent( unmountChildrenComponents ); enableButton.ifPresent( show ); } }); enableButton.on( 'click', function() { $( this ).hide(); filters.ifPresent( mountChildrenComponents ); disableButton.ifPresent( show ); }); }) }; return { mount: function() { filters.ifPresent( mountChildrenComponents ); filters.ifPresent( mountEventToggler ); } } }()); FiltersComponent.mount();