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:
parent
dee491a684
commit
e213d123f8
@ -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) {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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() {}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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());
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user