--- livetable.js.1 2009-08-17 14:39:17.000000000 +0200 +++ livetable.js 2009-10-06 18:19:26.000000000 +0200 @@ -86,8 +86,15 @@ this.observeSortableColumns(); + // Code to retrieve the current filters in the target part of the url + var currentFilter = location.hash; + if (currentFilter && currentFilter!="" && this.filters!=currentFilter) { + this.lastoffset = this.filter.updateFilters(currentFilter.substring(1)); + this.filters = this.filter.getFilters(); + } + // Show initial rows - this.showRows(1, this.limit); + this.showRows(this.lastoffset,this.limit) }, /** @@ -213,6 +220,10 @@ showRows: function(offset, limit) { this.lastoffset = offset; + + // Set the target part of the URL to have the filters be sticky + location = "#offset=" + this.lastoffset + this.filters; + // This is some debugging string. var buff = 'request to display rows '+offset+' to '+(offset+limit)+'
\n'; @@ -528,6 +539,54 @@ return filterString; }, + updateFilters:function(filterString){ + // populating the filter objects + this.filters=new Object(); + var filtervalues = filterString.split('&'); + for (var i = 0;i< filtervalues.length; i++) { + var filterkeyvalue = filtervalues[i]; + var pos = filterkeyvalue.indexOf("="); + if (pos!=-1) { + this.filters[filterkeyvalue.substring(0, pos)] = filterkeyvalue.substring(pos + 1); + } + } + + // set the offset which was in the query string + var offset; + if (this.filters["offset"]) + offset = parseInt(this.filters["offset"]); + else + offset = 1; + + var inputs=this.filterNode.getElementsByTagName("input"); + for(var i=0;i