{"version":3,"sources":["../../source/assets/js/video-gallery.js"],"names":["$","document","ready","$filterForm","length","$videos","$gender","find","$dropdownTrigger","$ageCheckboxWrapper","data","text","trim","on","$trigger","this","expanded","attr","$dropdown","next","toggleClass","off","e","contains","filter","get","target","is","$ageCheckboxes","$allAges","not","prop","checked","buttonText","checkboxList","inputChanged","_actionTimer","_updateDelay","clearTimeout","setTimeout","sendAjaxRequest","$filterContainer","closest","stickyNavHeight","outerHeight","$placeholder","addClass","appendTo","parent","$div","boxes","combined","each","value","parseInt","val","push","join","ajax","url","genders","ages","type","dataType","done","result","animate","opacity","html","IntersectionObserver","entry","intersectionRatio","css","height","removeClass","top","threshold","observe","jQuery"],"mappings":"CAAA,SAAAA,GACAA,EAAAC,UAAAC,MAAA,WACA,IAAAC,EAAAH,EAAA,qBACA,IAAAG,EAAAC,OAAA,OAEA,IAAAC,EAAAL,EAAA,kBACAM,EAAAH,EAAAI,KAAA,kBACAC,EAAAL,EAAAI,KAAA,4BACAE,EAAAN,EAAAI,KAAA,qBAKAC,EAAAE,KAAA,YAAAF,EAAAG,OAAAC,QACAJ,EAAAK,GAAA,QAAA,WACA,IAAAC,EAAAd,EAAAe,MACAC,EAAA,SAAAF,EAAAG,KAAA,iBAEAC,EAAAJ,EAAAK,KAAA,qBAAAC,YAAA,UAAAJ,GACAF,EAAAG,KAAA,iBAAAD,GAEAA,GAEAhB,EAAA,QAAAqB,IAAA,sBAAAR,GAAA,qBAAA,SAAAS,GAEAtB,EAAAuB,SAAAL,EAAAM,OAAA,WAAAC,IAAA,GAAAH,EAAAI,SACA1B,EAAAsB,EAAAI,QAAAC,GAAAT,IACAlB,EAAAsB,EAAAI,QAAAC,GAAAb,KAEAI,EAAAE,YAAA,UAAA,GACAN,EAAAG,KAAA,iBAAA,QASA,IAAAW,EAAAnB,EAAAF,KAAA,SACAsB,EAAAD,EAAAJ,OAAA,YACAI,EAAAf,GAAA,SAAA,WAEAb,EAAAe,MAAAY,GAAAE,GAEAD,EAAAE,IAAAf,MAAAgB,KAAA,UAAAhB,KAAAiB,SAGAJ,EAAAE,IAAAD,GAAAC,IAAA,YAAA1B,OAGAyB,EAAAE,KAAA,WAAA,GAFAF,EAAAE,KAAA,WAAA,GAOA,IAAAE,EAAA,GACAJ,EAAAF,GAAA,YACAM,EAAAJ,EAAAV,KAAA,SAAAT,KAAA,kBAAA,IAAAkB,EAAAE,IAAAD,GAAAzB,OAAA,KAEA6B,EAAAC,EAAAzB,GAAA,IACAL,SACA6B,EAAAzB,EAAAE,KAAA,cAGAF,EAAAG,KAAAsB,GAEAE,MAMAhC,EAAAI,KAAA,UAAAM,GAAA,SAAAsB,GACA,IACAC,EADAC,EAAA,KAEA,SAAAF,IACAE,EAAA,GAEAC,aAAAF,GACAA,EAAAG,WAAAC,EAAAH,IAEAG,IAOA,IAAAC,EAAAtC,EAAAuC,QAAA,WACAC,EAAA3C,EAAA,WAAA4C,cACAC,EAAA7C,EAAA,WAAA8C,SAAA,2BAAAC,SAAAN,EAAAO,UAaA,SAAAd,EAAAe,EAAAtC,GACA,IAAAuC,EAAAD,EAAA1C,KAAA,kCACA4C,EAAA,GASA,OAPAD,EAAAE,KAAA,WACA,IAAAC,EAAA1C,EAAAX,EAAAe,MAAAiC,SAAArC,OAAAC,OAAA0C,SAAAtD,EAAAe,MAAAwC,OAEAF,GAAAF,EAAAK,KAAAH,KAIA1C,EAAAwC,EAAAM,KAAA,MAAAN,EAAAM,KAAA,KAGA,SAAAjB,IACAxC,EAAA0D,KAAA,CACAC,IAAAxD,EAAAc,KAAA,WAAA,iBACAP,KAAA,CACAkD,QAAAtD,EAAAiD,MACAM,KAAA3B,EAAAzB,IAEAqD,KAAA3D,EAAAc,KAAA,WAAA,OACA8C,SAAA,SACAC,KAAA,SAAAC,GACA5D,EAAA6D,QAAA,CAAAC,QAAA,GAAA,IAAA,WACA9D,EAAA+D,KAAAH,GACA5D,EAAA6D,QAAA,CAAAC,QAAA,GAAA,SAtCA,IAAAE,qBAAA,SAAAC,GACA,IAAAA,EAAA,GAAAC,mBACA1B,EAAA2B,IAAA,CAAAC,OAAAhC,EAAAG,aAAA,KACAH,EAAAK,SAAA,UAAA0B,IAAA,MAAA7B,KAEAF,EAAAiC,YAAA,UAAAF,IAAA,CAAAG,IAAA,KACA9B,EAAA2B,IAAA,CAAAC,OAAA,OAEA,CAAAG,UAAA,IACAC,QAAApC,EAAAO,SAAAvB,IAAA,MArGA,CAuIAqD","file":"video-gallery.js","sourcesContent":["( function( $ ) {\n\t$( document ).ready( function () {\n\t\tvar $filterForm = $( '#main-filter-form' );\n\t\tif( !$filterForm.length ) { return; }\n\n\t\tvar $videos = $( '#video-listing' ),\n\t\t\t$gender = $filterForm.find( '#filter-gender' ),\n\t\t\t$dropdownTrigger = $filterForm.find( '#filter-age-group button' ),\n\t\t\t$ageCheckboxWrapper = $filterForm.find( '#filter-age-group' );\n\n\t\t/////\n\t\t///// Dropdown Handler\n\t\t/////\n\t\t$dropdownTrigger.data( 'text-none', $dropdownTrigger.text().trim() ); // stash the original text\n\t\t$dropdownTrigger.on( 'click', function() {\n\t\t\tvar $trigger = $( this );\n\t\t\tvar expanded = $trigger.attr( 'aria-expanded' ) === 'true';\n\n\t\t\tvar $dropdown = $trigger.next( '.filter__dropdown' ).toggleClass( 'active', !expanded );\n\t\t\t$trigger.attr( 'aria-expanded', !expanded );\n\n\t\t\tif( !expanded ) {\n\t\t\t\t// on click outside of a tab, close it\n\t\t\t\t$( 'body' ).off( 'click.videoGallery' ).on( 'click.videoGallery', function( e ) {\n\t\t\t\t\tif( \n\t\t\t\t\t\t!$.contains( $dropdown.filter( '.active' ).get( 0 ), e.target )\n\t\t\t\t\t\t&& !$( e.target ).is( $dropdown )\n\t\t\t\t\t\t&& !$( e.target ).is( $trigger )\n\t\t\t\t\t) {\n\t\t\t\t\t\t$dropdown.toggleClass( 'active', false );\n\t\t\t\t\t\t$trigger.attr( 'aria-expanded', false );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\t/////\n\t\t///// Handle \"Age\" multiselect\n\t\t/////\n\t\tvar $ageCheckboxes = $ageCheckboxWrapper.find( 'input' );\n\t\tvar $allAges = $ageCheckboxes.filter( '#age-all' );\n\t\t$ageCheckboxes.on( 'change', function() {\n\t\t\t// Handle \"Select All\"\n\t\t\tif( $( this ).is( $allAges ) ) {\n\t\t\t\t// match all other checkboxes to the select all state\n\t\t\t\t$ageCheckboxes.not( this ).prop( 'checked', this.checked );\n\t\t\t} else {\n\t\t\t\t// adjust the \"Select All\" based on other checkbox interactions\n\t\t\t\tif( !$ageCheckboxes.not( $allAges ).not( ':checked' ).length ) { // nothing that is not checked\n\t\t\t\t\t$allAges.prop( 'checked', true );\n\t\t\t\t} else {\n\t\t\t\t\t$allAges.prop( 'checked', false );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Update the button text based on what is selected\n\t\t\tvar buttonText = '';\n\t\t\tif( $allAges.is( ':checked' ) ) {\n\t\t\t\tbuttonText = $allAges.next( 'label' ).data( 'selected-label' ) + '(' + $ageCheckboxes.not( $allAges ).length + ')';\n\t\t\t} else {\n\t\t\t\tbuttonText = checkboxList( $ageCheckboxWrapper, true );\n\t\t\t\tif( !buttonText.length ) {\n\t\t\t\t\tbuttonText = $dropdownTrigger.data( 'text-none' );\n\t\t\t\t}\n\t\t\t}\n\t\t\t$dropdownTrigger.text( buttonText );\n\n\t\t\tinputChanged();\n\t\t} );\n\n\t\t/////\n\t\t///// AJAX Trigger\n\t\t/////\n\t\t$filterForm.find( 'select' ).on( 'change', inputChanged );\n\t\tvar _updateDelay = 1500,\n\t\t\t_actionTimer;\n\t\tfunction inputChanged() {\n\t\t\tif ( _updateDelay > 0 ) {\n\t\t\t\t// debounce the reload\n\t\t\t\tclearTimeout( _actionTimer );\n\t\t\t\t_actionTimer = setTimeout( sendAjaxRequest, _updateDelay );\n\t\t\t} else {\n\t\t\t\tsendAjaxRequest();\n\t\t\t}\n\t\t}\n\n\t\t/////\n\t\t///// Sticky Behavior\n\t\t/////\n\t\tvar $filterContainer = $filterForm.closest( '.filter' );\n\t\tvar stickyNavHeight = $( '.nav-bg' ).outerHeight();\n\t\tvar $placeholder = $( '
' ).addClass( 'filter__pin-placeholder' ).appendTo( $filterContainer.parent() );\n\t\tconst observer = new IntersectionObserver( function( entry ) {\n\t\t\tif( entry[0].intersectionRatio === 0 ) {\n\t\t\t\t$placeholder.css( { height: $filterContainer.outerHeight( true ) } );\n\t\t\t\t$filterContainer.addClass( 'pinned' ).css( 'top', stickyNavHeight );\n\t\t\t} else {\n\t\t\t\t$filterContainer.removeClass( 'pinned' ).css( { 'top': '' } );\n\t\t\t\t$placeholder.css( { height: '' } );\n\t\t\t}\n\t\t}, { threshold: 0 } );\n\t\tobserver.observe( $filterContainer.parent().get( 0 ) );\n\t\t\n\n\t\tfunction checkboxList( $div, text ) {\n\t\t\tvar boxes = $div.find( 'input[type=\"checkbox\"]:checked' ),\n\t\t\t\tcombined = [];\n\n\t\t\tboxes.each( function() {\n\t\t\t\tvar value = text ? $( this ).parent().text().trim() : parseInt( $( this ).val() );\n\n\t\t\t\tif( value ) { combined.push( value ); }\n\t\t\t} );\n\n\t\t\t// text needs spaces between\n\t\t\treturn text ? combined.join( ', ' ) : combined.join( ',' );\n\t\t}\n\n\t\tfunction sendAjaxRequest() {\n\t\t\t$.ajax( {\n\t\t\t\turl: $filterForm.attr( 'action' ) || '/filter-videos',\n\t\t\t\tdata: {\n\t\t\t\t\tgenders: $gender.val(),\n\t\t\t\t\tages: checkboxList( $ageCheckboxWrapper )\n\t\t\t\t},\n\t\t\t\ttype: $filterForm.attr( 'method' ) || 'POST',\n\t\t\t\tdataType: 'html'\n\t\t\t} ).done( function ( result ) {\n\t\t\t\t$videos.animate( { opacity: 0 }, 500, function () {\n\t\t\t\t\t$videos.html( result );\n\t\t\t\t\t$videos.animate( { opacity: 1 }, 300 );\n\t\t\t\t} );\n\t\t\t} );\n\t\t}\n\t} );\n} )( jQuery );"]}