author | Michael Krelin <hacker@klever.net> | 2006-10-01 23:53:31 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2006-10-01 23:53:31 (UTC) |
commit | b6a122d536aef024b69d40cdf2ac0332d7c14607 (patch) (side-by-side diff) | |
tree | 5b6f01eb73f858e6caaf22301e23d7b6b996ffea /content | |
parent | 455df70118b045c6053b33ae2f0318a70e4f96b8 (diff) | |
download | fireflix-b6a122d536aef024b69d40cdf2ac0332d7c14607.zip fireflix-b6a122d536aef024b69d40cdf2ac0332d7c14607.tar.gz fireflix-b6a122d536aef024b69d40cdf2ac0332d7c14607.tar.bz2 |
paginating through search results
git-svn-id: http://svn.klever.net/kin/fireflix/trunk@179 fe716a7a-6dde-0310-88d9-d003556173a8
-rw-r--r-- | content/fireflix-panel.xul | 13 | ||||
-rw-r--r-- | content/fireflix.css | 10 | ||||
-rw-r--r-- | content/fireflix.js | 50 | ||||
-rw-r--r-- | content/util.js | 7 |
4 files changed, 75 insertions, 5 deletions
diff --git a/content/fireflix-panel.xul b/content/fireflix-panel.xul index 398dd78..bf6df73 100644 --- a/content/fireflix-panel.xul +++ b/content/fireflix-panel.xul @@ -50,2 +50,8 @@ oncommand="fireflix.foundphotos.on_cmd_open(event)" /> + <command id="cmd_search_prev_page" + label="&panel.search.cmd_search_prev_page.label;" + oncommand="fireflix.foundphotos.on_cmd_prev(event)" disabled="true"/> + <command id="cmd_search_next_page" + label="&panel.search.cmd_search_next_page.label;" + oncommand="fireflix.foundphotos.on_cmd_next(event)" disabled="true"/> </commandset> @@ -132,2 +138,9 @@ </groupbox> + <hbox> + <button command="cmd_search_prev_page"/> + <spacer flex="1"/> + <label id="search_page" hidden="true"/> + <spacer flex="1"/> + <button command="cmd_search_next_page"/> + </hbox> <tree id="searchresults" rows="2" flex="1" diff --git a/content/fireflix.css b/content/fireflix.css index 71080d1..9e7bf6b 100644 --- a/content/fireflix.css +++ b/content/fireflix.css @@ -89 +89,11 @@ div#searchresult_description { } + +label#search_page { + font-weight: bold; + background: white; color: #404040; + border-color: #c0c0c0 #404040 #404040 #c0c0c0; + border-style: solid; + border-width: 1px; + -moz-border-radius: 1em; + padding: 0.5ex 1ex; +} diff --git a/content/fireflix.js b/content/fireflix.js index e144aae..92c42f4 100644 --- a/content/fireflix.js +++ b/content/fireflix.js @@ -694,3 +694,4 @@ var fireflix = { 'searchresult_props','search_photo', - 'searchresult_title','searchresult_description' + 'searchresult_title','searchresult_description', + 'search_page','cmd_search_prev_page','cmd_search_next_page' ]); @@ -731,2 +732,6 @@ var fireflix = { }, + paging: { + pars: null, + page: null, pages: null, perpage: null, total: null + }, search_photos: function() { @@ -744,11 +749,22 @@ var fireflix = { } + this.paging.pars = new Object(); + this.paging.page = null; this.paging.pages = null; + this.paging.perpage = null; this.paging.total = null; + for(var p in pars) this.paging.pars[p] = pars[p]; + this.perform_search(pars); + }, + perform_search: function(p) { var _this = this; - this.fireflix.flickr.api_call( pars, + this.fireflix.flickr.api_call( p, function(xr) { var x = xr.responseXML; - var xp = x.evaluate( - '/rsp/photos/photo', x, null, - XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); + var xp = xp_nodes('/rsp/photos/photo',x); _this.importXPR(xp); _this.tree.ensureRowIsVisible(0); + xp = xp_node('/rsp/photos',x); + _this.paging.page = parseInt(xp.getAttribute('page')); + _this.paging.pages = parseInt(xp.getAttribute('pages')); + _this.paging.perpage = parseInt(xp.getAttribute('perpage')); + _this.paging.total = parseInt(xp.getAttribute('total')); + _this.update_paging(); _this.on_select(); @@ -759,2 +775,26 @@ var fireflix = { }, + on_cmd_prev: function(ev) { + var pars = new Object(); + for(var p in this.paging.pars) pars[p] = this.paging.pars[p]; + pars.page=this.paging.page-1; pars.per_page=this.paging.perpage; + this.perform_search(pars); + }, + on_cmd_next: function(ev) { + var pars = new Object(); + for(var p in this.paging.pars) pars[p] = this.paging.pars[p]; + pars.page=this.paging.page+1; pars.per_page=this.paging.perpage; + this.perform_search(pars); + }, + update_paging: function() { + if(! (this.paging.pars && this.paging.page && this.paging.pages) ) { + this.search_page.value=''; this.search_page.hidden = true; + this.cmd_search_prev_page.setAttribute('disabled','true'); + this.cmd_search_next_page.setAttribute('disabled','true'); + }else{ + this.search_page.value=this.fireflix.loc_strings.getFormattedString('search_page',[this.paging.page,this.paging.pages]); + this.search_page.hidden=false; + this.cmd_search_prev_page.setAttribute('disabled',(this.paging.page>1)?'false':'true'); + this.cmd_search_next_page.setAttribute('disabled',(this.paging.page<this.paging.pages)?'false':'true'); + } + }, render_description_frame: function(content) { diff --git a/content/util.js b/content/util.js index c4af09e..ccc61cf 100644 --- a/content/util.js +++ b/content/util.js @@ -60,2 +60,9 @@ function xp_node(xp,x) { } +/* + * extract xpath-specified ordered set of nodes + */ +function xp_nodes(xp,x) { + return x.evaluate( + xp, x, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); +} |