Index: branches/1.0.x/inc/js/list_manager.js =================================================================== diff -u -N -r14911 -r14980 --- branches/1.0.x/inc/js/list_manager.js (.../list_manager.js) (revision 14911) +++ branches/1.0.x/inc/js/list_manager.js (.../list_manager.js) (revision 14980) @@ -98,13 +98,26 @@ this.reload(true); } +ListManager.replaceFilter = function ($form_id, $form_html) { + $('#' + $form_id).replaceWith($form_html); +} + +ListManager.replaceCounters = function ($field, $counters) { + // reset all counters in case if we got less, then are displayed right now + $('.filter-counter', '#filter-form-' + $field).text('0'); + + for (var $option_value in $counters) { + $('#' + jq('filter-counter[' + $field + '][' + $option_value + ']')).text($counters[$option_value]); + } +} + ListManager.registerFilter = function ($field) { var $manager = this, $form = $('#filter-form-' + $field); $manager.filters[$field] = {'type': $form.attr('filter_type')}; - $('h2:first a', $form).click( + /*$('h2:first a', $form).click( function ($e) { var $header = $(this).parent(), $active = $header.hasClass('active'); @@ -114,13 +127,21 @@ return false; } + );*/ + + $('h2:first .reset-filter', $form).click( + function ($e) { + $manager.resetFilter($field); + + return false; + } ); switch( $manager.filters[$field].type ) { case 'radio': $("input[type='radio']", $form).click( function ($e) { - $manager.updateFilterParams(); + $manager.updateFilterParams($field); } ); break; @@ -142,13 +163,52 @@ update_checkbox_options($regexp, $hidden_id, $form); - $manager.updateFilterParams(); + $manager.updateFilterParams($field); } ); break; } } +ListManager.resetFilters = function ($reload) { + for (var $filter_field in this.filters) { + this.resetFilter($filter_field, $reload); + } +} + +ListManager.resetFilter = function ($field, $reload) { + var $manager = this, + $form = $('#filter-form-' + $field); + + switch( $manager.filters[$field].type ) { + case 'radio': + $("input[type='radio'][value='']", $form).attr('checked', true); + break; + + case 'checkbox': + var $checkbox = $("input[type='checkbox'][value='']", $form), + $hidden_id = $checkbox.attr('id').replace(/_([\d\w-=]|)+$/, ''), + $regexp = new RegExp(jq($hidden_id) + '_([\\d\\w-=]+)'); + + $checkbox.attr('checked', true); + $("input[type='checkbox']", $form).not($checkbox).attr('checked', false); + + update_checkbox_options($regexp, $hidden_id, $form); + break; + + case 'range': + var $param_name = 'filters[' + $field + ']', + $slider = $('#' + jq($param_name + '_slider') ); + + $slider.slider('option', 'values', [$slider.slider('option', 'min'), $slider.slider('option', 'max')]); + + $('#' + jq($param_name) ).val(''); + break; + } + + $manager.updateFilterParams($field, $reload); +} + ListManager.initFilters = function () { if ( !this.firstLoad ) { return; @@ -161,6 +221,18 @@ this.firstLoad = false; } +ListManager.toggleFilter = function ($field, $toggle) { + var $form = $('#filter-form-' + $field), + $param_value = this.getParam('filters[' + $field + ']'); + + if ( $toggle === undefined ) { + $toggle = $param_value !== false && $param_value !== ''; + } + + $('h2:first', $form).toggleClass('active', $toggle); + $('h2:first .reset-filter', $form).toggle($toggle); +} + ListManager.initFilter = function ($field) { var $values = '', $form = $('#filter-form-' + $field), @@ -171,6 +243,8 @@ return; } + this.toggleFilter($field); + switch( this.filters[$field].type ) { case 'radio': $('#' + jq($param_name + '_' + $param_value) ).attr('checked', true); @@ -190,10 +264,10 @@ case 'range': var $slider = $('#' + jq($param_name + '_slider') ), $slider_options = { - min: $slider.slider('option', 'min'), - max: $slider.slider('option', 'max'), - step: $slider.slider('option', 'step') - }; + min: $slider.slider('option', 'min'), + max: $slider.slider('option', 'max'), + step: $slider.slider('option', 'step') + }; $values = $param_value.split('-'); $values = this.invertRange($slider_options, $values[0], $values[1]); @@ -227,7 +301,7 @@ ); } -ListManager.updateFilterParams = function () { +ListManager.updateFilterParams = function ($current_field, $reload) { var $form_fields; for (var $field in this.filters) { @@ -240,7 +314,14 @@ this.syncChecked( $("input[type=checkbox], input[type=radio]", '#filter-form-' + $field) ); } - this.scheduleReload(); + if ( $current_field !== undefined ) { + this.toggleFilter($current_field); + this.setParam('exclude_filters', $current_field); + } + + if ( $reload === undefined || $reload === true ) { + this.scheduleReload(); + } } ListManager.init = function () { Index: branches/1.0.x/elements/sorting.elm.tpl =================================================================== diff -u -N -r14890 -r14980 --- branches/1.0.x/elements/sorting.elm.tpl (.../sorting.elm.tpl) (revision 14890) +++ branches/1.0.x/elements/sorting.elm.tpl (.../sorting.elm.tpl) (revision 14980) @@ -38,7 +38,7 @@    - Show All + Show All
@@ -121,8 +121,9 @@ } ); - $('#per-page-all').click( + $('#show-all').click( function () { + ListManager.resetFilters(false); $('#per-page').val(-1).change(); return false; Index: branches/1.0.x/inc/styles.css =================================================================== diff -u -N -r14900 -r14980 --- branches/1.0.x/inc/styles.css (.../styles.css) (revision 14900) +++ branches/1.0.x/inc/styles.css (.../styles.css) (revision 14980) @@ -542,6 +542,11 @@ position: relative; z-index: 150; } + +.block h2 em.filter-header { + padding-left: 14px; +} + .block h2 a { text-decoration: underline; } .block h2 i { background: url(@templates_base@/img/bc-step.png) no-repeat 50% 50%; @@ -572,10 +577,10 @@ } .block.alt-block h2 a { display: block; - height: 36px; - line-height: 36px; - padding-left: 14px; - text-decoration: none; + float: right; + line-height: 8px; + padding-top: 8px; + padding-right: 8px; } .block .block-content { Index: branches/1.0.x/img/bg-block.png =================================================================== diff -u -N -r14708 -r14980 Binary files differ Index: branches/1.0.x/elements/content_boxes/products.elm.tpl =================================================================== diff -u -N -r14907 -r14980 --- branches/1.0.x/elements/content_boxes/products.elm.tpl (.../products.elm.tpl) (revision 14907) +++ branches/1.0.x/elements/content_boxes/products.elm.tpl (.../products.elm.tpl) (revision 14980) @@ -42,3 +42,9 @@ No Products + + + + \ No newline at end of file Index: branches/1.0.x/elements/filters.elm.tpl =================================================================== diff -u -N -r14911 -r14980 --- branches/1.0.x/elements/filters.elm.tpl (.../filters.elm.tpl) (revision 14911) +++ branches/1.0.x/elements/filters.elm.tpl (.../filters.elm.tpl) (revision 14980) @@ -14,7 +14,7 @@ class="active"> checked name="" id="_" value=""/>  - class="active">() + class="active">() @@ -29,7 +29,7 @@ class="active"> checked id="_" value=""/>  - class="active">() + class="active">() @@ -48,7 +48,7 @@ -
  • ()
  • +
  • ()
  • @@ -79,8 +79,14 @@ // jQuery UI slider has inverted range - fix that here var $selected_range = ListManager.invertRange($slider_options, ui.values[0], ui.values[1]); - $('#' + jq('')).val($selected_range[0] + '-' + $selected_range[1]); - ListManager.updateFilterParams(); + if ( $selected_range[0] == $slider_options.min && $selected_range[1] == $slider_options.max ) { + $('#' + jq('')).val(''); + } + else { + $('#' + jq('')).val($selected_range[0] + '-' + $selected_range[1]); + } + + ListManager.updateFilterParams(''); } }, $values = ListManager.invertRange($slider_options, $options.values[0], $options.values[1]); @@ -107,7 +113,15 @@
    -

    Filter by

    +

    + + Filter by + + + +

    @@ -123,3 +137,15 @@ + + + '': , + + + + ListManager.replaceCounters('', {}); + + + + ListManager.replaceFilter('filter-form-', ''); + \ No newline at end of file Index: branches/1.0.x/img/btn_reset_filter.png =================================================================== diff -u -N Binary files differ