1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2024-10-27 20:34:16 +00:00

Search.Suggest: Move highlighting code out of cache pathway to js_wtr [#538]

This commit is contained in:
gnosygnu 2019-08-11 08:33:17 -04:00
parent dee491a684
commit e213d123f8
9 changed files with 17 additions and 16 deletions

View File

@ -25,10 +25,11 @@ class Srch_rslt_cbk__js implements Srch_rslt_cbk {
}
public String To_str_and_clear() {return js_wtr.To_str_and_clear();}
public void On_cancel() {}
@gplx.Virtual public void On_rslts_found(Srch_search_qry qry, Srch_rslt_list rslts_list, int rslts_bgn, int rslts_end) {
@gplx.Virtual public void On_rslts_found(Srch_search_ctx ctx, Srch_search_qry qry, Srch_rslt_list rslts_list, int rslts_bgn, int rslts_end) {
// exit if done
if (!rslts_list.Rslts_are_enough && !rslts_list.Rslts_are_done) return;
// build js; EX: "receiveSuggestions('search_word', ["a"])"
js_wtr.Func_init(cbk_func);
js_wtr.Prm_bry(search_raw);
@ -38,19 +39,24 @@ class Srch_rslt_cbk__js implements Srch_rslt_cbk {
for (int i = 0; i < qry.Slab_end; i++) {
if (i >= rslts_len) break; // rslts_end will overshoot actual rslts_len; check for out of bounds and exit; EX: default suggest will have rslts_end of 25, but "earth time" will retrieve 15 results
Srch_rslt_row row = rslts_list.Get_at(i);
Highlight(ctx, row); // always highlight title first; needed for suggest_box to update highlighting when increasing word; EX: Eart -> Earth; "Earth" should be highlighted, not "Eart"
js_wtr.Ary_bry(row.Page_ttl.Full_txt_w_ttl_case());
js_wtr.Ary_bry(row.Page_ttl_display(Bool_.Y));
}
js_wtr.Ary_term();
js_wtr.Func_term();
}
private static void Highlight(Srch_search_ctx ctx, Srch_rslt_row row) {
try {row.Page_ttl_highlight = ctx.Highlight_mgr.Highlight(row.Page_ttl.Full_txt_w_ttl_case());} // NOTE: always highlight row; needed for when search done in url_bar (highlight=n) and then same search reused for search (highlight=y)
catch (Exception e) {Xoa_app_.Usr_dlg().Warn_many("", "", "highlight failed; ttl=~{0} err=~{1}", row.Page_ttl_wo_ns, Err_.Message_gplx_log(e));}
}
}
class Srch_rslt_cbk__swt extends Srch_rslt_cbk__js implements Gfo_invk { private final Xoae_app app;
public Srch_rslt_cbk__swt(Xoae_app app, byte[] cbk_func, byte[] search_raw) {super(cbk_func, search_raw);
this.app = app;
}
@Override public void On_rslts_found(Srch_search_qry qry, Srch_rslt_list list, int rslts_bgn, int rslts_end) {
super.On_rslts_found(qry, list, rslts_bgn, rslts_end);
@Override public void On_rslts_found(Srch_search_ctx ctx, Srch_search_qry qry, Srch_rslt_list list, int rslts_bgn, int rslts_end) {
super.On_rslts_found(ctx, qry, list, rslts_bgn, rslts_end);
Gfo_invk_.Invk_by_val(app.Gui_mgr().Kit().New_cmd_sync(this), Invk__notify, js_wtr.To_str_and_clear());
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {

View File

@ -29,7 +29,7 @@ public class Srch_rslt_cbk__url_bar implements Srch_rslt_cbk, Gfo_invk {
this.app = app; this.url_bar = url_bar; this.max_results = max_results;
}
public void On_cancel() {}
public void On_rslts_found(Srch_search_qry qry, Srch_rslt_list rslts_list, int rslts_bgn, int rslts_end) {
public void On_rslts_found(Srch_search_ctx ctx, Srch_search_qry qry, Srch_rslt_list rslts_list, int rslts_bgn, int rslts_end) {
int rslts_len = rslts_list.Len();
this.rslts_finished = rslts_list.Rslts_are_enough || rslts_list.Rslts_are_done;

View File

@ -15,6 +15,6 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.xowa.addons.wikis.searchs.searchers.rslts; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.searchs.*; import gplx.xowa.addons.wikis.searchs.searchers.*;
public interface Srch_rslt_cbk {
void On_rslts_found(Srch_search_qry qry, Srch_rslt_list rslts_list, int rslts_bgn, int rslts_end);
void On_rslts_found(Srch_search_ctx ctx, Srch_search_qry qry, Srch_rslt_list rslts_list, int rslts_bgn, int rslts_end);
void On_cancel();
}

View File

@ -18,6 +18,6 @@ public class Srch_rslt_cbk_ {
public static final Srch_rslt_cbk Noop = new Srch_rslt_cbk__noop();
}
class Srch_rslt_cbk__noop implements Srch_rslt_cbk {
public void On_rslts_found(Srch_search_qry qry, Srch_rslt_list rslts_list, int rslts_bgn, int rslts_end) {}
public void On_rslts_found(Srch_search_ctx ctx, Srch_search_qry qry, Srch_rslt_list rslts_list, int rslts_bgn, int rslts_end) {}
public void On_cancel() {}
}

View File

@ -17,7 +17,6 @@ package gplx.xowa.addons.wikis.searchs.searchers.rslts; import gplx.*; import gp
import gplx.xowa.wikis.data.tbls.*;
public class Srch_rslt_list_ {
public static boolean Add_if_new(Srch_search_ctx ctx, Srch_rslt_list rslts, Srch_rslt_row row) {
Srch_rslt_list_.Highlight(ctx, row); // always highlight title first; needed for suggest_box to update highlighting when increasing word; EX: Eart -> Earth; "Earth" should be highlighted, not "Eart"
return
( !rslts.Has(row.Key) // ignore: page already added by another word; EX: "A B"; word is "B", but "A B" already added by "A"
&& !rslts.Ids__has(row.Page_id) // ignore: page already added by page-tbl or by redirect
@ -30,10 +29,6 @@ public class Srch_rslt_list_ {
if (!page_tbl.Select_by_id(tmp_page_itm, redirect_id)) {Xoa_app_.Usr_dlg().Warn_many("", "", "page not found for redirect_id; redirect_id=~{0}", redirect_id); return;}
row.Page_redirect_ttl = Xoa_ttl.Replace_unders(tmp_page_itm.Ttl_page_db());
}
private static void Highlight(Srch_search_ctx ctx, Srch_rslt_row row) {
try {row.Page_ttl_highlight = ctx.Highlight_mgr.Highlight(row.Page_ttl.Full_txt_w_ttl_case());} // NOTE: always highlight row; needed for when search done in url_bar (highlight=n) and then same search reused for search (highlight=y)
catch (Exception e) {Xoa_app_.Usr_dlg().Warn_many("", "", "highlight failed; ttl=~{0} err=~{1}", row.Page_ttl_wo_ns, Err_.Message_gplx_log(e));}
}
private static boolean Redirect_exists(Srch_rslt_list rslts, Srch_rslt_row cur_row) {
int trg_id = cur_row.Page_redirect_id;
if (trg_id == Srch_rslt_row.Page_redirect_id_null) { // src_page is not redirect

View File

@ -43,7 +43,7 @@ public class Srch_link_wkr extends Percentile_select_base {
// enough results at start; occurs in Special:Search when revisiting slabs; EX: 1-100 -> 101-200 -> 1-100
if (ctx.Qry.Slab_end < rslts_list.Len()) {
rslts_list.Rslts_are_enough = true;
rslt_cbk.On_rslts_found(ctx.Qry, rslts_list, 0, rslts_list.Len());
rslt_cbk.On_rslts_found(ctx, ctx.Qry, rslts_list, 0, rslts_list.Len());
return;
}
@ -111,7 +111,7 @@ public class Srch_link_wkr extends Percentile_select_base {
// merge to rslts_list; notify; cleanup;
if (tmp_rslts_len > 0) rslts_list.Merge(tmp_rslts);
rslts_list.Process_rdr_done(rng, rslts_are_enough, rslts_are_done);
rslt_cbk.On_rslts_found(ctx.Qry, rslts_list, rslts_bgn, rslts_end);
rslt_cbk.On_rslts_found(ctx, ctx.Qry, rslts_list, rslts_bgn, rslts_end);
rslts_list.Rslts_are_first = false;
rslts_bgn = rslts_end;
// Gfo_usr_dlg_.Instance.Log_many("", "", "search.search rslts; rslts=~{0}", rng_log.To_str_and_clear());

View File

@ -34,7 +34,7 @@ public class Srch_page_tbl_wkr {
Srch_rslt_list_.Get_redirect_ttl(page_tbl, tmp_page_row, row);
ctx.Rslts_list.Add(row);
ctx.Rslts_list.Ids__add(row.Page_id, row);
cbk.On_rslts_found(ctx.Qry, ctx.Rslts_list, 0, 1);
cbk.On_rslts_found(ctx, ctx.Qry, ctx.Rslts_list, 0, 1);
ctx.Rslts_list.Rslts_are_first = false;
}
}

View File

@ -57,7 +57,7 @@ public class Srch_special_cmd implements Gfo_invk, Srch_rslt_cbk, Xog_tab_close_
}
private void Hide_cancel_btn() {Thread_adp_.Start_by_key(gplx.xowa.apps.Xoa_thread_.Key_special_search_cancel, this, Invk_hide_cancel);}
private void Hide_cancel_btn_async() {js_wkr.Html_atr_set("xowa_cancel_" + wiki.Domain_str(), "style", "display:none;");}
public void On_rslts_found(Srch_search_qry qry, Srch_rslt_list rslts_list, int rslts_bgn, int rslts_end) {
public void On_rslts_found(Srch_search_ctx ctx, Srch_search_qry qry, Srch_rslt_list rslts_list, int rslts_bgn, int rslts_end) {
if (rslts_list.Rslts_are_first) {
if (rslts_bgn > qry.Slab_bgn) {
for (int i = qry.Slab_bgn; i < rslts_bgn; ++i) {

View File

@ -61,7 +61,7 @@ public class Srch_special_searcher {
}
class Srch_rslt_cbk__synchronous implements Srch_rslt_cbk {
public Srch_rslt_list Rslts() {return rslts;} private Srch_rslt_list rslts;
public void On_rslts_found(Srch_search_qry qry, Srch_rslt_list rslts_list, int rslts_bgn, int rslts_end) {
public void On_rslts_found(Srch_search_ctx ctx, Srch_search_qry qry, Srch_rslt_list rslts_list, int rslts_bgn, int rslts_end) {
this.rslts = rslts_list; // just assign it
}
public void On_cancel() {} // synchronous cannot be canceled