1function sf_adjust_elements_waitimg(){ 2 jQuery( '.sf-result' ).find( 'img' ).load( function(){ 3 sf_adjust_elements(); 4 }); 5} 6 7function sf_adjust_elements(){ 8 if( typeof( jQuery( '.sf-result' ).attr( 'sf-stop-adjust-elements' ) ) != 'undefined' ) 9 return false; 10 11 jQuery( '.sf-result > li' ).css( {'height':'auto'} ); 12 var resultlist = jQuery( '.sf-result > li' ); 13 var i = 1; 14 var h = 0; 15 var elements = []; 16 resultlist.each( function(){ 17 if( h < jQuery( this ).outerHeight() ) 18 h = jQuery( this ).outerHeight(); 19 if( i <= sf_columns ) 20 elements.push( this ); 21 if( i == sf_columns ){ 22 jQuery( elements ).each( function(){ 23 jQuery( this ).css({height:h+'px'}); 24 }); 25 elements = []; 26 h = 0; 27 i = 0; 28 } else { 29 30 } 31 i++; 32 }); 33} 34 35function collect_data( wrapper ){ 36 37 var data = {}; 38 wrapper.find('select').each( function(){ 39 if( ( jQuery( this ).attr( 'name' ) != 'orderby' || jQuery( this ).val() != null ) && jQuery( this ).attr( 'disabled' ) != 'disabled' ){ 40 if( jQuery( this ).val() != '' ){ 41 data[ jQuery( this ).attr( 'name' ) ] = jQuery( this ).val() ; 42 } 43 } 44 }); 45 46 wrapper.find('input').each( function(){ 47 if( typeof( jQuery( this ).attr( 'name' ) ) != 'undefined' && ( typeof jQuery( this ).attr( 'disabled' ) == 'undefined' || jQuery( this ).attr( 'disabled' ) == false ) ){ 48 if( jQuery( this ).hasClass( 'sf-date' ) || jQuery( this ).attr( 'type' ) == 'hidden' || jQuery( this ).attr( 'name' ).substr( jQuery( this ).attr( 'name' ).length - 2, 2 ) != '[]' ){ 49 if( jQuery( this ).val() != '' ){ 50 if( jQuery( this ).attr( 'type' ) != 'radio' || jQuery( this ).prop( 'checked' ) ){ 51 if( jQuery( this ).attr( 'name' ).substr( jQuery( this ).attr( 'name' ).length - 2, 2 ) != '[]' ){ 52 data[ jQuery( this ).attr( 'name' ) ] = jQuery( this ).val() ; 53 } else { 54 var data_name = jQuery( this ).attr( 'name' ).substr( 0, jQuery( this ).attr( 'name' ).length - 2 ) 55 if( typeof( data[ data_name ] ) == 'undefined' ) 56 data[ data_name ] = []; 57 data[ data_name ].push( jQuery( this ).val() ); 58 } 59 } 60 } 61 } else{ 62 var n = jQuery( this ).attr( 'name' ).substr( 0, jQuery( this ).attr( 'name' ).length - 2 ); 63 64 if( jQuery( this ).prop( 'checked' ) ){ 65 if( typeof data[n] == 'undefined' ) 66 data[n] = []; 67 data[n].push( jQuery( this ).val() ); 68 } 69 } 70 } 71 }); 72 return data; 73 } 74 75function get_filter_results( start, $form ){ 76 77 var wrapper = jQuery( '.sf-wrapper' ); 78 var data = { 79 action : 'sf-search', 80 data : collect_data( wrapper ) 81 }; 82 83 84 if( typeof start == 'undefined' ){ 85 location.href = '#sf-' + JSON.stringify( data.data ); 86 } else { 87 if( typeof $form != 'undefined' ){ 88 var url = $form.attr( 'action' ); 89 url += '#sf-' + JSON.stringify( collect_data( $form ) ); 90 location.href = url; 91 return; 92 } 93 } 94 wrapper.css({opacity:.1}); 95 search_data = data.data; 96 jQuery.post( 97 sf_ajax_root, 98 data, 99 function( response ){ 100 response = JSON.parse( response ); 101 if( JSON.stringify( search_data ) != JSON.stringify( response.post ) ) 102 return; 103 wrapper.css({opacity:1}); 104 105 var txt = ''; 106 if( response.result.length > 0 ){ 107 for( var i = 0; i < response.result.length; i++ ){ 108 txt += response.result[i]; 109 } 110 } else { 111 txt = '<li class="no-result">Keine Ergebnisse gefunden</li>'; 112 } 113 jQuery( wrapper ).find( '.sf-result' ).html( txt ); 114 if( response.result.length > 0 ){ 115 sf_adjust_elements_waitimg(); 116 } 117 118 var txt = ''; 119 if( response.nav.length > 0 ){ 120 for( var i = 0; i < response.nav.length; i++ ){ 121 txt += response.nav[i]; 122 } 123 } 124 jQuery( wrapper ).find('ul.sf-nav').html( txt ); 125 if( typeof( response.head ) != 'undefined' ) 126 jQuery( wrapper ).find('.sf-result-head').html( response.head ); 127 128 129 if (document.createEvent) { 130 sfLoadEvent = document.createEvent( 'HTMLEvents' ); 131 sfLoadEvent.initEvent( 'sfLoadEvent', true, true, response ); 132 } else { 133 sfLoadEvent = document.createEventObject(); 134 sfLoadEvent.eventType = 'sfLoadEvent'; 135 } 136 sfLoadEvent.eventName = 'sfLoadEvent';
137 sfLoadEvent.data = { 'response': response, 'fields' : data.data }; 138 139 var eventElement = document.getElementsByClassName( 'sf-wrapper' ); 140 eventElement = eventElement[0]; 141 if (document.createEvent) { 142 eventElement.dispatchEvent(sfLoadEvent); 143 } else { 144 eventElement.fireEvent("on" + sfLoadEvent.eventType, sfLoadEvent); 145 } 146 } 147 ); 148 } 149 150 151jQuery( document ).ready( function(){ 152 153 154 jQuery( '.sf-wrapper' ).find( 'input' ).keyup( function( event ){ 155 if(event.which == 13) 156 get_filter_results(); 157 }); 158 159 160 161 jQuery( document ).on( 'change', '.sf-filter input, .sf-filter select', function(){ 162 var possible_cond_key = jQuery( this ).closest( '.sf-element' ).attr( 'data-id' ); 163 var possible_cond_val = jQuery( this ).val(); 164 if( ( jQuery( this ).attr('type') == 'checkbox' || jQuery( this ).attr('type') == 'radio' ) && !jQuery( this ).prop( 'checked' ) ) 165 possible_cond_val = -2; 166 jQuery( '.sf-element-hide' ).each( function(){ 167 if( jQuery( this ).attr( 'data-condkey' ) == possible_cond_key ){ 168 if( possible_cond_val == jQuery( this ).attr( 'data-condval' ) ){ 169 jQuery( this ).fadeIn(); 170 jQuery( this ).addClass( 'sf-element' ); 171 jQuery( this ).find( 'input, select' ).attr( 'disabled', false ); 172 }else{ 173 jQuery( this ).hide(); 174 jQuery( this ).removeClass( 'sf-element' ); 175 jQuery( this ).find( 'input, select' ).attr( 'disabled', true ); 176 } 177 } 178 }); 179 jQuery( '.sf-wrapper' ).find( 'input[name="page"]' ).remove(); 180 if( jQuery( '.sf-wrapper' ).find( '.sf-button-btnsearch' ).length == 0 ) 181 get_filter_results(); 182 }); 183 184 jQuery( document ).on( 'click','.sf-nav-click', function( event ){ 185 event.preventDefault(); 186 jQuery( '.sf-wrapper' ).find( 'input[name="page"]' ).remove(); 187 var txt = '<input type="hidden" name="page" value="' + jQuery( this ).attr( 'data-href' ) + '" />'; 188 jQuery( txt ).appendTo( '.sf-wrapper' ); 189 get_filter_results(); 190 jQuery('html, body').animate({ scrollTop: ( jQuery('.sf-wrapper').offset().top - 25 )}, 'slow'); 191 }); 192 193 if( location.hash.substr( 0, 4 ) == '#sf-' ){ 194 var range_max = ''; 195 var range_min = ''; 196 var hash = JSON.parse( location.hash.substr( 4 ) ); 197 var do_ajax_request = true; 198 for ( property in hash ) { 199 jQuery( '.sf-element-hide[data-condkey="'+property+'"]' ).each( function(){ 200 if( jQuery( this ).attr( 'data-condval' ) == hash[property] ){ 201 jQuery( this ).show(); 202 jQuery( this ).addClass( 'sf-element' ); 203 } 204 }); 205 206 if( jQuery( '.sf-filter *[name="' + property + '"]' ).attr( 'type' ) != 'radio' ) 207 jQuery( '.sf-filter *[name="' + property + '"]' ).val( hash[property] ); 208 jQuery( '.sf-filter input[name="' + property + '[]"]' ).each( function(){ 209 if( jQuery( this ).attr( 'type' ) == 'checkbox' ){ 210 for( var i = 0; i < hash[property].length; i++ ) 211 if( jQuery( this ).val() == hash[property][i] ) 212 jQuery( this ).prop( 'checked', true ); 213 } 214 }); 215 216 var date_index = 0; 217 jQuery( '.sf-filter input.sf-date[name="' + property + '[]"]' ).each( function(){ 218 jQuery( this ).val( hash[property][ date_index ] ); 219 date_index++; 220 }); 221 222 jQuery( '.sf-filter input[type="radio"][name="' + property + '"][value="' + hash[property] +'"]' ).prop('checked',true); 223 if( jQuery( '.sf-filter *[name="' + property + '"]' ).parent().hasClass( 'sf-range-wrapper' ) ){ 224 var arrange_slider = true; 225 jQuery( '.sf-filter *[name="' + property + '"]' ).parent().find( 'input[type="hidden"]' ).each( function(){ 226 if( jQuery( this ).val() != hash[ jQuery( this ).attr( 'name') ] ) 227 arrange_slider = false; 228 }); 229 if( arrange_slider ){ 230 var parent = jQuery( '.sf-filter *[name="' + property + '"]' ).parent() 231 parent.find( 'input[type="hidden"]' ).each( function(){ 232 if( jQuery( this ).attr( 'name' ).match(/max/i) ) 233 range_max = parseInt( jQuery( this ).val() ); 234 else 235 range_min = parseInt( jQuery( this ).val() ); 236 }); 237 parent.find( '.sf-range' ).slider( "option", "values", [range_min,range_max] ); 238 if( parent.attr( 'data-unitfront' ) == 1 ) 239 var pricetxt = parent.attr( 'data-unit' ) + range_min + ' - ' + parent.attr( 'data-unit' ) + range_max; 240 else 241 var pricetxt = range_min + parent.attr( 'data-unit' ) + ' - ' + range_max + parent.attr( 'data-unit' ); 242 parent.find( '.sf-write' ).text( pricetxt ); 243 } 244 } 245 } 246 if( do_ajax_request ) 247 get_filter_results( true ); 248 } 249}); 250/** 251 * The load event 252 */ 253var sfLoadEvent;
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.