Index: branches/1.0.x/inc/js/list_manager.js =================================================================== diff -u -N -r14890 -r14900 --- branches/1.0.x/inc/js/list_manager.js (.../list_manager.js) (revision 14890) +++ branches/1.0.x/inc/js/list_manager.js (.../list_manager.js) (revision 14900) @@ -7,6 +7,7 @@ ListManager.xhrRequests = []; ListManager.reloadTimer = null; ListManager.reloadTimeout = 1000; +ListManager.firstLoad = true; ListManager.getUrl = function () { var $url = this.url; @@ -64,6 +65,10 @@ } } +ListManager.getParam = function ($name) { + return this.urlParams[$name] !== undefined ? this.urlParams[$name] : false; +} + ListManager.updateAnchor = function () { var $query_string = [], $url_params = sort_object(this.urlParams); @@ -86,17 +91,16 @@ ); this.urlParams = $query_string; + + // sync values from url params into empty filters on first page with anchor load + this.initFilters(); + this.reload(true); } -ListManager.replaceFilter = function ($form_id, $form_html) { - $('#' + $form_id).replaceWith($form_html); -} - -ListManager.registerFilter = function ($form_id) { +ListManager.registerFilter = function ($field) { var $manager = this, - $form = $('#' + $form_id), - $field = $form.attr('filter_field'); + $form = $('#filter-form-' + $field); $manager.filters[$field] = {'type': $form.attr('filter_type')}; @@ -145,6 +149,55 @@ } } +ListManager.initFilters = function () { + if ( !this.firstLoad ) { + return; + } + + for (var $filter_field in this.filters) { + this.initFilter($filter_field); + } + + this.firstLoad = false; +} + +ListManager.initFilter = function ($field) { + var $values = '', + $form = $('#filter-form-' + $field), + $param_name = 'filters[' + $field + ']', + $param_value = this.getParam($param_name); + + if ( $param_value === false || $param_value === '' ) { + return; + } + + switch( this.filters[$field].type ) { + case 'radio': + $('#' + jq($param_name + '_' + $param_value) ).attr('checked', true); + break; + + case 'checkbox': + $values = $param_value.substring(1, $param_value.length - 1).split('|'); + + for (var $i = 0; $i < $values.length; $i++) { + $('#' + jq($param_name + '_' + $values[$i]) ).attr('checked', true); + } + + $('#' + jq($param_name + '_') ).attr('checked', false); + $('#' + jq($param_name) ).val($param_value); + break; + + case 'range': + $values = $param_value.split('-'); + + $('#' + jq($param_name + '_slider') ).slider('option', 'values', $values); + $('#' + jq($param_name) ).val($param_value); + break; + } + + this.syncChecked( $("input[type=checkbox], input[type=radio]", '#filter-form-' + $field) ); +} + ListManager.syncChecked = function ($checkboxes) { $checkboxes.each( function () {