From 57354ae979464a40e2a2c2482d2959326ecbd573 Mon Sep 17 00:00:00 2001 From: rajbot Date: Mon, 18 Oct 2010 06:19:58 +0000 Subject: [PATCH] show search highlights when querying new full-text search api. --- BookReader/BookReader.js | 128 ++++++++++++++++++++++++--------------- 1 file changed, 79 insertions(+), 49 deletions(-) diff --git a/BookReader/BookReader.js b/BookReader/BookReader.js index d10adad..afcdc42 100644 --- a/BookReader/BookReader.js +++ b/BookReader/BookReader.js @@ -74,7 +74,7 @@ function BookReader() { this.printPopup = null; this.searchTerm = ''; - this.searchResults = {}; + this.searchResults = null; this.firstIndex = null; @@ -2657,17 +2657,23 @@ BookReader.prototype.searchNew = function(term) { url += '&path='+this.bookPath.replace(new RegExp('/'+this.subPrefix+'$'), ''); //remove subPrefix from end of path url += '&q='+escape(term); //console.log('search url='+url); - this.ttsAjax = $.ajax({url:url, dataType:'jsonp', jsonpCallback:'BRSearchCallbackNew'}); + this.showProgressPopup(); + this.ttsAjax = $.ajax({url:url, dataType:'jsonp', jsonpCallback:'BRSearchCallbackNew'}); } // Unfortunately, we can't pass 'br.searchCallback' to our search service, // because it can't handle the '.' -function BRSearchCallbackNew(results) { +function BRSearchCallbackNew(results) { //console.log('got ' + results.matches.length + ' results'); + br.removeSearchResults(); + br.searchResults = results; + //console.log(br.searchResults); var i; for (i=0; i= 0) { - var result = this.searchResults[key]; - if (null == result.div) { - result.div = document.createElement('div'); - $(result.div).attr('className', 'BookReaderSearchHilite').appendTo('#pagediv'+key); - //console.log('appending ' + key); - } - $(result.div).css({ - width: (result.r-result.l)/this.reduce + 'px', - height: (result.b-result.t)/this.reduce + 'px', - left: (result.l)/this.reduce + 'px', - top: (result.t)/this.reduce +'px' - }); - - } else { - //console.log(key + ' not displayed'); - this.searchResults[key].div=null; + var results = this.searchResults; + if (null == results) return; + var i, j; + for (i=0; i= 0) { + if (null == box.div) { + //create a div for the search highlight, and stash it in the box object + box.div = document.createElement('div'); + $(box.div).attr('className', 'BookReaderSearchHilite').appendTo('#pagediv'+pageIndex); + } + $(box.div).css({ + width: (box.r-box.l)/this.reduce + 'px', + height: (box.b-box.t)/this.reduce + 'px', + left: (box.l)/this.reduce + 'px', + top: (box.t)/this.reduce +'px' + }); + } else { + if (null != box.div) { + //console.log('removing search highlight div'); + $(box.div).remove(); + box.div=null; + } + } } } + } + // twoPageGutter() //______________________________________________________________________________ // Returns the position of the gutter (line between the page images) @@ -2908,31 +2923,36 @@ BookReader.prototype.twoPagePlaceFlipAreas = function() { }); } -// showSearchHilites2UP() +// showSearchHilites2UPNew() //______________________________________________________________________________ BookReader.prototype.updateSearchHilites2UP = function() { - - for (var key in this.searchResults) { - key = parseInt(key, 10); - if (jQuery.inArray(key, this.displayedIndices) >= 0) { - var result = this.searchResults[key]; - if (null == result.div) { - result.div = document.createElement('div'); - $(result.div).attr('className', 'BookReaderSearchHilite').css('zIndex', 3).appendTo('#BRtwopageview'); - //console.log('appending ' + key); - } - - this.setHilightCss2UP(result.div, key, result.l, result.r, result.t, result.b); - - } else { - //console.log(key + ' not displayed'); - if (null != this.searchResults[key].div) { - //console.log('removing ' + key); - $(this.searchResults[key].div).remove(); + //console.log('updateSearchHilites2UP results = ' + this.searchResults); + var results = this.searchResults; + if (null == results) return; + var i, j; + for (i=0; i= 0) { + if (null == box.div) { + //create a div for the search highlight, and stash it in the box object + box.div = document.createElement('div'); + $(box.div).attr('className', 'BookReaderSearchHilite').css('zIndex', 3).appendTo('#BRtwopageview'); + //console.log('appending new div'); + } + this.setHilightCss2UP(box.div, pageIndex, box.l, box.r, box.t, box.b); + } else { + if (null != box.div) { + //console.log('removing search highlight div'); + $(box.div).remove(); + box.div=null; + } } - this.searchResults[key].div=null; } } + } // setHilightCss2UP() @@ -2967,14 +2987,21 @@ BookReader.prototype.setHilightCss2UP = function(div, index, left, right, top, b // removeSearchHilites() //______________________________________________________________________________ BookReader.prototype.removeSearchHilites = function() { - for (var key in this.searchResults) { - if (null != this.searchResults[key].div) { - $(this.searchResults[key].div).remove(); - this.searchResults[key].div=null; - } - } + var results = this.searchResults; + if (null == results) return; + var i, j; + for (i=0; i