mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
Cfg: Convert rest of pages
This commit is contained in:
@@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.wikis.searchs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*;
|
||||
import gplx.xowa.addons.wikis.searchs.dbs.*; import gplx.xowa.addons.wikis.searchs.searchers.*; import gplx.xowa.addons.wikis.searchs.parsers.*; import gplx.xowa.addons.wikis.searchs.searchers.rslts.*; import gplx.xowa.addons.wikis.searchs.searchers.cbks.*;
|
||||
import gplx.xowa.addons.wikis.searchs.gui.urlbars.*;
|
||||
import gplx.xowa.langs.cases.*;
|
||||
public class Srch_search_addon implements Xoax_addon_itm, Srch_search_addon_api {
|
||||
private final Srch_search_mgr search_mgr;
|
||||
|
||||
@@ -1,108 +0,0 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.wikis.searchs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*;
|
||||
import gplx.core.net.*; import gplx.core.net.qargs.*;
|
||||
import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.addons.wikis.searchs.searchers.cbks.*; import gplx.xowa.addons.wikis.searchs.searchers.*;
|
||||
public class Srch_search_cfg implements Gfo_invk {
|
||||
private final Xoae_app app;
|
||||
private String args_default_str = "";// default args for search
|
||||
private byte search_mode = Tid_search_mode_all_pages_v2;
|
||||
private int all_pages_extend = 1000; // look ahead by 1000
|
||||
private int all_pages_min = 10000; // only look at pages > 10 kb
|
||||
private boolean log_enabled = false;
|
||||
public Srch_search_cfg(Xoae_app app) {
|
||||
this.app = app;
|
||||
ns_mgr.Add_main_if_empty();
|
||||
}
|
||||
public boolean Enabled() {return enabled;} private boolean enabled = true;
|
||||
public int Rslts_max() {return results_max;} private int results_max = 25;
|
||||
public boolean Auto_wildcard() {return auto_wildcard;} private boolean auto_wildcard = false; // automatically add wild-card; EX: Earth -> *Earth*
|
||||
public Srch_ns_mgr Ns_mgr() {return ns_mgr;} private final Srch_ns_mgr ns_mgr = new Srch_ns_mgr();
|
||||
public Gfo_qarg_itm[] Args_default() {return args_default;} private Gfo_qarg_itm[] args_default = Gfo_qarg_itm.Ary_empty;
|
||||
public void Args_default_str_(String v) {
|
||||
this.args_default_str = v;
|
||||
byte[] bry = Bry_.new_a7("http://x.org/a?" + v);
|
||||
Gfo_url tmp_url = app.User().Wikii().Utl__url_parser().Url_parser().Parse(bry, 0, bry.length);
|
||||
args_default = tmp_url.Qargs();
|
||||
}
|
||||
private Srch_search_addon addon;
|
||||
public void Search(Xowe_wiki wiki, byte[] search_bry, byte[] cbk_func) {
|
||||
if ( !enabled
|
||||
|| search_bry.length == 0
|
||||
) return;
|
||||
if (addon == null)
|
||||
addon = Srch_search_addon.Get(wiki);
|
||||
else {
|
||||
if (!Bry_.Eq(wiki.Domain_bry(), addon.Wiki_domain())) // NOTE: suggest-box caches addon at wiki level; need to check if wiki has changed
|
||||
addon = Srch_search_addon.Get(wiki);
|
||||
}
|
||||
// tab_close_mgr.Add(this);
|
||||
Srch_search_qry qry = Srch_search_qry.New__suggest_box(wiki, this, search_bry);
|
||||
Srch_rslt_cbk__suggest_box cbk = new Srch_rslt_cbk__suggest_box(wiki.Appe(), cbk_func, search_bry);
|
||||
addon.Search(qry, cbk);
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_enabled)) return Yn.To_str(enabled);
|
||||
else if (ctx.Match(k, Invk_enabled_)) enabled = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk_results_max)) return results_max;
|
||||
else if (ctx.Match(k, Invk_results_max_)) results_max = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk_search_mode)) return Search_mode_str(search_mode);
|
||||
else if (ctx.Match(k, Invk_search_mode_)) search_mode = Search_mode_parse(m.ReadStr("v"));
|
||||
else if (ctx.Match(k, Invk_search_mode_list)) return Options_search_mode_list;
|
||||
else if (ctx.Match(k, Invk_all_pages_extend)) return all_pages_extend;
|
||||
else if (ctx.Match(k, Invk_all_pages_extend_)) all_pages_extend = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk_all_pages_min)) return all_pages_min;
|
||||
else if (ctx.Match(k, Invk_all_pages_min_)) all_pages_min = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk_auto_wildcard)) return Yn.To_str(auto_wildcard);
|
||||
else if (ctx.Match(k, Invk_auto_wildcard_)) auto_wildcard = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk_log_enabled)) return Yn.To_str(log_enabled);
|
||||
else if (ctx.Match(k, Invk_log_enabled_)) log_enabled = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk_args_default)) return args_default_str;
|
||||
else if (ctx.Match(k, Invk_args_default_)) Args_default_str_(m.ReadStr("v"));
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
public static final String
|
||||
Invk_enabled = "enabled", Invk_enabled_ = "enabled_", Invk_results_max = "results_max", Invk_results_max_ = "results_max_"
|
||||
, Invk_search_mode = "search_mode", Invk_search_mode_ = "search_mode_", Invk_search_mode_list = "search_mode_list"
|
||||
, Invk_all_pages_extend = "all_pages_extend", Invk_all_pages_extend_ = "all_pages_extend_"
|
||||
, Invk_all_pages_min = "all_pages_min", Invk_all_pages_min_ = "all_pages_min_"
|
||||
, Invk_auto_wildcard = "auto_wildcard", Invk_auto_wildcard_ = "auto_wildcard_"
|
||||
, Invk_log_enabled = "log_enabled", Invk_log_enabled_ = "log_enabled_"
|
||||
, Invk_args_default = "args_default", Invk_args_default_ = "args_default_"
|
||||
;
|
||||
private static final String Str_search_mode_search = "Search", Str_search_mode_all_pages_v1 = "AllPages", Str_search_mode_all_pages_v2 = "AllPages_(v2)";
|
||||
public static final int[] Ns_default_main = new int[] {Xow_ns_.Tid__main};
|
||||
public static final byte Tid_search_mode_all_pages_v1 = 0, Tid_search_mode_search = 1, Tid_search_mode_all_pages_v2 = 2;
|
||||
private static Keyval[] Options_search_mode_list = Keyval_.Ary(Keyval_.new_(Str_search_mode_search), Keyval_.new_(Str_search_mode_all_pages_v1), Keyval_.new_(Str_search_mode_all_pages_v2));
|
||||
private static byte Search_mode_parse(String v) {
|
||||
if (String_.Eq(v, Str_search_mode_search)) return Tid_search_mode_search;
|
||||
else if (String_.Eq(v, Str_search_mode_all_pages_v1)) return Tid_search_mode_all_pages_v1;
|
||||
else if (String_.Eq(v, Str_search_mode_all_pages_v2)) return Tid_search_mode_all_pages_v2;
|
||||
else throw Err_.new_unhandled(v);
|
||||
}
|
||||
private static String Search_mode_str(byte v) {
|
||||
switch (v) {
|
||||
case Tid_search_mode_search: return Str_search_mode_search;
|
||||
case Tid_search_mode_all_pages_v1: return Str_search_mode_all_pages_v1;
|
||||
case Tid_search_mode_all_pages_v2: return Str_search_mode_all_pages_v2;
|
||||
default: throw Err_.new_unhandled(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -24,7 +24,7 @@ public class Srch_bldr_mgr_ {
|
||||
Xob_bldr bldr = app.Bldr();
|
||||
|
||||
bldr.Cmd_mgr().Add_many(wiki, Xob_cmd_keys.Key_text_search_cmd);
|
||||
int page_rank_iterations = app.Api_root().Bldr().Wiki().Import().Page_rank().Iteration_max();
|
||||
int page_rank_iterations = wiki.Import_mgr().Page_rank_iterations();
|
||||
boolean page_rank_enabled = page_rank_iterations > 0;
|
||||
if (page_rank_enabled) {
|
||||
bldr.Cmd_mgr().Add(new gplx.xowa.bldrs.cmds.utils.Xob_download_cmd(bldr, wiki).Dump_type_(gplx.xowa.addons.bldrs.wmdumps.pagelinks.bldrs.Pglnk_bldr_cmd.Dump_type_key));
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.wikis.searchs.gui.htmlbars; 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.gui.*;
|
||||
import gplx.core.net.*; import gplx.core.net.qargs.*;
|
||||
import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.addons.wikis.searchs.searchers.cbks.*; import gplx.xowa.addons.wikis.searchs.searchers.*;
|
||||
public class Srch_htmlbar_mgr implements Gfo_invk {
|
||||
private Srch_search_addon addon;
|
||||
private int results_max = 25;
|
||||
public void Init_by_kit(Xoae_app app, gplx.gfui.kits.core.Gfui_kit kit) {
|
||||
app.Cfg().Bind_many_app(this, Cfg__enabled, Cfg__results_max);
|
||||
}
|
||||
public boolean Enabled() {return enabled;} private boolean enabled = true;
|
||||
public void Search(Xowe_wiki wiki, byte[] search_bry, byte[] cbk_func) {
|
||||
if ( !enabled
|
||||
|| search_bry.length == 0
|
||||
) return;
|
||||
if (addon == null)
|
||||
addon = Srch_search_addon.Get(wiki);
|
||||
else {
|
||||
if (!Bry_.Eq(wiki.Domain_bry(), addon.Wiki_domain())) // NOTE: suggest-box caches addon at wiki level; need to check if wiki has changed
|
||||
addon = Srch_search_addon.Get(wiki);
|
||||
}
|
||||
// tab_close_mgr.Add(this);
|
||||
Srch_search_qry qry = Srch_search_qry.New__suggest_box(wiki, wiki.App().Addon_mgr().Itms__search__special().Ns_mgr(), results_max, search_bry);
|
||||
Srch_rslt_cbk__suggest_box cbk = new Srch_rslt_cbk__suggest_box(wiki.Appe(), cbk_func, search_bry);
|
||||
addon.Search(qry, cbk);
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Cfg__enabled)) enabled = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Cfg__results_max)) results_max = m.ReadInt("v");
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String
|
||||
Cfg__enabled = "xowa.addon.search.html_bar.enabled"
|
||||
, Cfg__results_max = "xowa.addon.search.html_bar.results_max"
|
||||
;
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.wikis.searchs.gui.urlbars; 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.gui.*;
|
||||
import gplx.gfui.controls.standards.*;
|
||||
import gplx.gfui.kits.core.*;
|
||||
import gplx.xowa.addons.wikis.searchs.searchers.*; import gplx.xowa.addons.wikis.searchs.searchers.cbks.*; import gplx.xowa.addons.wikis.searchs.searchers.crts.*;
|
||||
import gplx.xowa.guis.views.*;
|
||||
public class Srch_urlbar_mgr implements Gfo_invk { // NOTE: needs to be app-level b/c binding to key events in urlbar
|
||||
private Srch_search_addon addon;
|
||||
private Xoae_app app;
|
||||
private GfuiComboBox url_bar;
|
||||
private boolean enabled = true;
|
||||
private int max_results = 10;
|
||||
private boolean auto_wildcard = true;
|
||||
private final Srch_ns_mgr ns_mgr = new Srch_ns_mgr().Add_main_if_empty();
|
||||
private Srch_crt_scanner_syms syms = Srch_search_mgr.Scanner_syms;
|
||||
private void Ns_ids_(String s) {
|
||||
int[] ns_ids = Int_.Ary_empty;
|
||||
if (String_.Eq(s, "*")) {} // leave as int[0]; ns_mgr will interpret as wildcard
|
||||
else {
|
||||
ns_ids = Int_.Ary_parse(s, ",");
|
||||
}
|
||||
ns_mgr.Add_by_int_ids(ns_ids);
|
||||
if (addon != null) addon.Clear_rslts_cache(); // invalidate cache when ns changes; else ns_0 rslts will show up in ns_100; DATE:2016-03-24
|
||||
}
|
||||
|
||||
public void Init_by_kit(Xoae_app app, Gfui_kit kit) {
|
||||
// get url_bar and set defaults
|
||||
this.url_bar = app.Gui_mgr().Browser_win().Url_box();
|
||||
url_bar.Items__jump_len_(5);
|
||||
url_bar.Items__visible_rows_(10);
|
||||
|
||||
this.app = app;
|
||||
app.Cfg().Bind_many_app(this, Cfg__enabled, Cfg__max_results, Cfg__auto_wildcard, Cfg__ns_ids, Cfg__symbols, Cfg__visible_rows, Cfg__jump_len);
|
||||
}
|
||||
public void Search() {
|
||||
if (!enabled) return;
|
||||
Xog_tab_itm active_tab = app.Gui_mgr().Browser_win().Tab_mgr().Active_tab(); if (active_tab == null) return;
|
||||
Xow_wiki wiki = active_tab.Wiki();
|
||||
|
||||
String search_str = url_bar.Text();
|
||||
url_bar.Text_fallback_(search_str);
|
||||
|
||||
// remove "en.wikipedia.org/wiki/"
|
||||
// String url_bgn = wiki.Domain_str() + gplx.xowa.htmls.hrefs.Xoh_href_.Str__wiki;
|
||||
// if (String_.Has_at_bgn(search_str, url_bgn))
|
||||
// search_str = String_.Mid(search_str, String_.Len(url_bgn));
|
||||
if (String_.Len_eq_0(search_str)) {
|
||||
url_bar.Items__update(String_.Ary_empty);
|
||||
return;
|
||||
}
|
||||
|
||||
if (addon == null) {
|
||||
addon = Srch_search_addon.Get(wiki);
|
||||
}
|
||||
else {
|
||||
if (!Bry_.Eq(wiki.Domain_bry(), addon.Wiki_domain())) // NOTE: url_bar_api caches addon at wiki level; need to check if wiki has changed
|
||||
addon = Srch_search_addon.Get(wiki);
|
||||
}
|
||||
if (addon.Db_mgr().Cfg().Version_id__needs_upgrade()) return; // exit early, else will flash "searching" message below; note that url-bar should not trigger upgrade;
|
||||
url_bar.List_sel_idx_(0); // clear selected list item; EX: search "a" -> page down; sel is row #5 -> search "b" -> sel should not be #5; DATE:2016-03-24
|
||||
if (!url_bar.List_visible()) url_bar.Items__size_to_fit(max_results); // resize offscreen; handles 1st search when dropdown flashes briefly in middle of screen before being moved under bar; DATE:2016-03-24
|
||||
|
||||
Srch_search_qry qry = Srch_search_qry.New__url_bar(wiki, ns_mgr, auto_wildcard, max_results, Bry_.new_u8(search_str));
|
||||
Srch_rslt_cbk__url_bar cbk = new Srch_rslt_cbk__url_bar(app, url_bar, max_results);
|
||||
Xoa_app_.Usr_dlg().Prog_one("", "", "searching (please wait): ~{0}", search_str);
|
||||
addon.Search(qry, cbk);
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Cfg__enabled)) enabled = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Cfg__max_results)) max_results = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Cfg__auto_wildcard)) auto_wildcard = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Cfg__ns_ids)) Ns_ids_(m.ReadStr("v"));
|
||||
else if (ctx.Match(k, Cfg__symbols)) syms.Parse(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Cfg__visible_rows)) url_bar.Items__visible_rows_(m.ReadInt("v"));
|
||||
else if (ctx.Match(k, Cfg__jump_len)) url_bar.Items__jump_len_(m.ReadInt("v"));
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String
|
||||
Cfg__enabled = "xowa.addon.search.url_bar.enabled"
|
||||
, Cfg__max_results = "xowa.addon.search.url_bar.max_results"
|
||||
, Cfg__auto_wildcard = "xowa.addon.search.url_bar.auto_wildcard"
|
||||
, Cfg__ns_ids = "xowa.addon.search.url_bar.ns_ids"
|
||||
, Cfg__symbols = "xowa.addon.search.url_bar.symbols"
|
||||
, Cfg__visible_rows = "xowa.addon.search.url_bar.visible_rows"
|
||||
, Cfg__jump_len = "xowa.addon.search.url_bar.jump_len"
|
||||
;
|
||||
}
|
||||
@@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.wikis.searchs.searchers; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.searchs.*;
|
||||
import gplx.xowa.wikis.domains.*;
|
||||
import gplx.xowa.addons.wikis.searchs.gui.htmlbars.*;
|
||||
public class Srch_search_qry {
|
||||
public Srch_search_qry(byte tid, Srch_ns_mgr ns_mgr, Srch_search_phrase phrase, int slab_bgn, int slab_end) {
|
||||
this.Tid = tid;
|
||||
@@ -32,17 +33,17 @@ public class Srch_search_qry {
|
||||
public final int Slab_end; // EX: 20
|
||||
|
||||
public static final byte Tid_len = 4, Tid__url_bar = 0, Tid__suggest_box = 1, Tid__search_page = 2, Tid__android = 3;
|
||||
public static Srch_search_qry New__url_bar(Xow_wiki wiki, gplx.xowa.apps.apis.xowa.addons.searchs.Xoapi_url_bar cfg, byte[] search_orig) {
|
||||
return new Srch_search_qry(Tid__url_bar, cfg.Ns_mgr(), Srch_search_phrase.New(wiki.Case_mgr(), search_orig, cfg.Auto_wildcard()), 0, cfg.Max_results());
|
||||
public static Srch_search_qry New__url_bar(Xow_wiki wiki, Srch_ns_mgr ns_mgr, boolean auto_wildcard, int max_results, byte[] search_orig) {
|
||||
return new Srch_search_qry(Tid__url_bar, ns_mgr, Srch_search_phrase.New(wiki.Case_mgr(), search_orig, auto_wildcard), 0, max_results);
|
||||
}
|
||||
public static Srch_search_qry New__suggest_box(Xow_wiki wiki, Srch_search_cfg cfg, byte[] search_orig) {
|
||||
return new Srch_search_qry(Tid__suggest_box, cfg.Ns_mgr(), Srch_search_phrase.New(wiki.Case_mgr(), search_orig, Bool_.Y), 0, cfg.Rslts_max());
|
||||
public static Srch_search_qry New__suggest_box(Xow_wiki wiki, Srch_ns_mgr ns_mgr, int results_max, byte[] search_orig) {
|
||||
return new Srch_search_qry(Tid__suggest_box, ns_mgr, Srch_search_phrase.New(wiki.Case_mgr(), search_orig, Bool_.Y), 0, results_max);
|
||||
}
|
||||
public static Srch_search_qry New__search_page(Xow_domain_itm[] domains, Xow_wiki wiki, Srch_search_cfg cfg, boolean simple_search, byte[] search_orig, int slab_idx, int slab_len) {
|
||||
public static Srch_search_qry New__search_page(Xow_domain_itm[] domains, Xow_wiki wiki, Srch_ns_mgr ns_mgr, boolean simple_search, byte[] search_orig, int slab_idx, int slab_len) {
|
||||
int slab_bgn = slab_idx * slab_len;
|
||||
int slab_end = slab_bgn + slab_len;
|
||||
boolean wildcard = simple_search;
|
||||
return new Srch_search_qry(Tid__search_page, cfg.Ns_mgr(), Srch_search_phrase.New(wiki.Case_mgr(), search_orig, wildcard), slab_bgn, slab_end);
|
||||
return new Srch_search_qry(Tid__search_page, ns_mgr, Srch_search_phrase.New(wiki.Case_mgr(), search_orig, wildcard), slab_bgn, slab_end);
|
||||
}
|
||||
public static Srch_search_qry New__drd(Xow_wiki wiki, Srch_ns_mgr ns_mgr, byte[] search_orig, int slab_bgn, int slab_end) {
|
||||
return new Srch_search_qry(Tid__android, ns_mgr, Srch_search_phrase.New(wiki.Case_mgr(), search_orig, Bool_.Y), slab_bgn, slab_end);
|
||||
|
||||
@@ -22,13 +22,13 @@ import gplx.xowa.apps.apis.xowa.addons.searchs.*;
|
||||
public class Srch_rslt_cbk__url_bar implements Srch_rslt_cbk, Gfo_invk {
|
||||
private final Xoae_app app;
|
||||
private final GfuiComboBox url_bar;
|
||||
private final Xoapi_url_bar url_bar_api;
|
||||
private String[] cbo_ary;
|
||||
private boolean rslts_finished;
|
||||
private int rslts_in_this_pass;
|
||||
private boolean rslts_shown = false;
|
||||
public Srch_rslt_cbk__url_bar(Xoae_app app, GfuiComboBox url_bar, Xoapi_url_bar url_bar_api) {
|
||||
this.app = app; this.url_bar = url_bar; this.url_bar_api = url_bar_api;
|
||||
private int max_results;
|
||||
public Srch_rslt_cbk__url_bar(Xoae_app app, GfuiComboBox url_bar, int max_results) {
|
||||
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) {
|
||||
@@ -41,8 +41,7 @@ public class Srch_rslt_cbk__url_bar implements Srch_rslt_cbk, Gfo_invk {
|
||||
&& rslts_bgn != 0 // if first one, still update; blanks out results from previous try;
|
||||
&& !rslts_finished) // if rslts_finished, still update to force cbo to "shrink"
|
||||
return; // exit now else will "blink" when refreshing;
|
||||
int max_rslts = url_bar_api.Max_results();
|
||||
int cbo_len = max_rslts; // force cbo_len to be max_rslts; reduces "blinking" when typing by keeping visible area to same size
|
||||
int cbo_len = max_results; // force cbo_len to be max_rslts; reduces "blinking" when typing by keeping visible area to same size
|
||||
if (rslts_list.Rslts_are_done) { // "shrink" cbo_len to rslts_len; EX: 10 wanted; 2 returned; shrink to 2 rows;
|
||||
cbo_len = rslts_len;
|
||||
}
|
||||
@@ -51,7 +50,7 @@ public class Srch_rslt_cbk__url_bar implements Srch_rslt_cbk, Gfo_invk {
|
||||
this.cbo_ary = new String[cbo_len];
|
||||
for (int i = 0; i < cbo_len; ++i) {
|
||||
String cbo_itm = "";
|
||||
if (i >= max_rslts) break;
|
||||
if (i >= max_results) break;
|
||||
if (i < rslts_len) {
|
||||
Srch_rslt_row rslt = rslts_list.Get_at(i);
|
||||
cbo_itm = String_.new_u8(rslt.Page_ttl_display(Bool_.N));
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.wikis.searchs.specials; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.searchs.*;
|
||||
import gplx.core.net.*; import gplx.core.net.qargs.*;
|
||||
import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.domains.crts.*;
|
||||
import gplx.xowa.addons.wikis.searchs.searchers.*;
|
||||
public class Srch_special_cfg implements Gfo_invk {
|
||||
private Xoa_app app;
|
||||
private final Xow_domain_crt_kv_itm_mgr multi_wikis_mgr = new Xow_domain_crt_kv_itm_mgr(); private byte[] multi_wikis_bry = Dflt_multi_wikis_bry;
|
||||
private final Xow_domain_crt_kv_itm_mgr multi_sorts_mgr = new Xow_domain_crt_kv_itm_mgr(); private byte[] multi_sorts_bry = Dflt_multi_sorts_bry;
|
||||
private String args_default_str = "";// default args for search
|
||||
public Srch_special_cfg() {
|
||||
multi_wikis_mgr.Parse_as_itms(multi_wikis_bry);
|
||||
multi_sorts_mgr.Parse_as_arys(multi_sorts_bry);
|
||||
ns_mgr.Add_main_if_empty();
|
||||
}
|
||||
public void Init_by_kit(Xoae_app app, gplx.gfui.kits.core.Gfui_kit kit) {
|
||||
this.app = app;
|
||||
app.Cfg().Bind_many_app(this, Cfg__results_per_page, Cfg__async_db, Cfg__auto_wildcard, Cfg__args_default, Cfg__multi_wikis, Cfg__multi_sorts);
|
||||
}
|
||||
public int Results_per_page() {return results_per_page;} private int results_per_page = 100;
|
||||
public boolean Async_db() {return async_db;} private boolean async_db = true;
|
||||
public boolean Auto_wildcard() {return auto_wildcard;} private boolean auto_wildcard = false; // automatically add wild-card; EX: Earth -> *Earth*
|
||||
public Gfo_qarg_itm[] Args_default() {return args_default;} private Gfo_qarg_itm[] args_default = Gfo_qarg_itm.Ary_empty;
|
||||
public Srch_ns_mgr Ns_mgr() {return ns_mgr;} private final Srch_ns_mgr ns_mgr = new Srch_ns_mgr();
|
||||
public Xow_domain_crt_itm Multi_wikis_crt (Xow_domain_itm cur_domain) {return multi_wikis_mgr.Find_itm(cur_domain, cur_domain);}
|
||||
public Xow_domain_crt_itm[] Multi_sorts_crt (Xow_domain_itm cur_domain) {return multi_sorts_mgr.Find_ary(cur_domain, cur_domain);}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Cfg__results_per_page)) results_per_page = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Cfg__async_db)) async_db = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Cfg__auto_wildcard)) auto_wildcard = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Cfg__args_default)) {
|
||||
this.args_default_str = m.ReadStr("v");
|
||||
byte[] bry = Bry_.new_a7("http://x.org/a?" + args_default_str);
|
||||
Gfo_url tmp_url = app.User().Wikii().Utl__url_parser().Url_parser().Parse(bry, 0, bry.length);
|
||||
this.args_default = tmp_url.Qargs();
|
||||
}
|
||||
else if (ctx.Match(k, Cfg__multi_wikis)) {
|
||||
byte[] multi_wikis_temp = m.ReadBry("v");
|
||||
if (multi_wikis_mgr.Parse_as_itms(multi_wikis_temp)) {
|
||||
this.multi_wikis_bry = multi_wikis_temp;
|
||||
}
|
||||
}
|
||||
else if (ctx.Match(k, Cfg__multi_sorts)) {
|
||||
byte[] multi_sorts_temp = m.ReadBry("v");
|
||||
if (multi_sorts_mgr.Parse_as_arys(multi_sorts_temp)) {
|
||||
this.multi_sorts_bry = multi_sorts_temp;
|
||||
}
|
||||
}
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String
|
||||
Cfg__results_per_page = "xowa.addon.search.results_per_page"
|
||||
, Cfg__async_db = "xowa.addon.search.async_db"
|
||||
, Cfg__auto_wildcard = "xowa.addon.search.auto_wildcard"
|
||||
, Cfg__args_default = "xowa.addon.search.args_default"
|
||||
, Cfg__multi_wikis = "xowa.addon.search.multi_wikis"
|
||||
, Cfg__multi_sorts = "xowa.addon.search.multi_sorts"
|
||||
;
|
||||
public static final byte[]
|
||||
Dflt_multi_wikis_bry = Bry_.new_a7("<any>|<self>")
|
||||
, Dflt_multi_sorts_bry = Bry_.new_a7("<any>|<self>,*.wikipedia,*.wikivoyage,*.wiktionary,*.wikisource,*.wikiquote,*.wikibooks,*.wikiversity,*.wikinews")
|
||||
;
|
||||
}
|
||||
@@ -16,30 +16,19 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.wikis.searchs.specials; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.searchs.*;
|
||||
import gplx.core.primitives.*; import gplx.xowa.apps.apis.xowa.specials.*;
|
||||
import gplx.core.primitives.*; import gplx.xowa.addons.wikis.searchs.specials.*;
|
||||
import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.domains.crts.*;
|
||||
import gplx.xowa.specials.*; import gplx.xowa.addons.wikis.searchs.searchers.*; import gplx.xowa.addons.wikis.searchs.searchers.cbks.*;
|
||||
public class Srch_special_page implements Xow_special_page, Gfo_invk, Gfo_evt_itm {
|
||||
private final Xoae_app app; private final Xow_domain_itm wiki_domain; private final Xoapi_search search_api;
|
||||
private final Srch_special_searcher search_mgr; private final Srch_qarg_mgr qargs_mgr;
|
||||
private Xow_domain_itm[] search_domain_ary;
|
||||
public Srch_special_page(Xowe_wiki wiki) {
|
||||
this.ev_mgr = new Gfo_evt_mgr(this);
|
||||
this.app = wiki.Appe();
|
||||
this.wiki_domain = wiki.Domain_itm();
|
||||
this.search_mgr = new Srch_special_searcher(wiki.Appe().Wiki_mgr());
|
||||
this.search_api = wiki.Appe().Api_root().Special().Search();
|
||||
this.qargs_mgr = new Srch_qarg_mgr(app.Gui_mgr().Search_cfg().Ns_mgr());
|
||||
Gfo_evt_mgr_.Sub_same_many(search_api, this, Xoapi_search.Evt_multi_wikis_changed, Xoapi_search.Evt_multi_wikis_changed);
|
||||
}
|
||||
public Gfo_evt_mgr Evt_mgr() {return ev_mgr;} private final Gfo_evt_mgr ev_mgr;
|
||||
import gplx.xowa.addons.wikis.searchs.gui.htmlbars.*;
|
||||
public class Srch_special_page implements Xow_special_page {
|
||||
public Xow_special_meta Special__meta() {return Xow_special_meta_.Itm__search;}
|
||||
public void Special__gen(Xow_wiki wikii, Xoa_page pagei, Xoa_url url, Xoa_ttl ttl) {
|
||||
Xowe_wiki wiki = (Xowe_wiki)wikii; Xoae_page page = (Xoae_page)pagei;
|
||||
if (search_domain_ary == null) Multi_wikis_changed();
|
||||
Srch_special_cfg search_cfg = wiki.Appe().Addon_mgr().Itms__search__special();
|
||||
Xow_domain_itm[] search_domain_ary = Get_domains(wiki.Appe(), search_cfg, wiki.Domain_itm());
|
||||
|
||||
// get args from urls while applying defaults from search_cfg
|
||||
Srch_search_cfg search_cfg = wiki.Appe().Gui_mgr().Search_cfg();
|
||||
Srch_qarg_mgr qargs_mgr = new Srch_qarg_mgr(wiki.App().Addon_mgr().Itms__search__special().Ns_mgr());
|
||||
qargs_mgr.Clear();
|
||||
qargs_mgr.Parse(search_cfg.Args_default());
|
||||
qargs_mgr.Parse(url.Qargs_ary());
|
||||
@@ -68,6 +57,7 @@ public class Srch_special_page implements Xow_special_page, Gfo_invk, Gfo_evt_it
|
||||
|
||||
// page not found, or explicit_search invoked
|
||||
if (search_page.Db().Page().Exists_n() || fulltext_invoked) {
|
||||
Srch_special_searcher search_mgr = new Srch_special_searcher(wiki.Appe().Wiki_mgr());
|
||||
if (qargs_mgr.Cancel() != null) { // cancel any existing searches
|
||||
search_mgr.Search__cancel(qargs_mgr.Cancel());
|
||||
page.Tab_data().Cancel_show_y_();
|
||||
@@ -75,8 +65,8 @@ public class Srch_special_page implements Xow_special_page, Gfo_invk, Gfo_evt_it
|
||||
}
|
||||
page.Html_data().Html_restricted_n_();
|
||||
page.Html_data().Xtn_search_text_(search_raw);
|
||||
Srch_search_qry qry = Srch_search_qry.New__search_page(search_domain_ary, wiki, search_cfg, qargs_mgr.Simple_search(), search_raw, qargs_mgr.Slab_idx(), search_api.Results_per_page());
|
||||
search_mgr.Search(wiki, page, search_api.Async_db(), search_domain_ary, qry);
|
||||
Srch_search_qry qry = Srch_search_qry.New__search_page(search_domain_ary, wiki, wiki.App().Addon_mgr().Itms__search__special().Ns_mgr(), qargs_mgr.Simple_search(), search_raw, qargs_mgr.Slab_idx(), search_cfg.Results_per_page());
|
||||
search_mgr.Search(wiki, page, search_cfg.Async_db(), search_domain_ary, qry);
|
||||
}
|
||||
// page found; return it;
|
||||
else {
|
||||
@@ -89,24 +79,6 @@ public class Srch_special_page implements Xow_special_page, Gfo_invk, Gfo_evt_it
|
||||
page.Redirect_trail().Itms__add__article(redirect_url, search_ttl, null);
|
||||
}
|
||||
}
|
||||
private void Multi_wikis_changed() {
|
||||
Xow_domain_crt_itm crt = search_api.Multi_wikis_crt(wiki_domain);
|
||||
this.search_domain_ary = Get_by_crt(app.Usere().Wiki().Xwiki_mgr(), wiki_domain, crt);
|
||||
if (search_domain_ary.length == 0) search_domain_ary = new Xow_domain_itm[] {wiki_domain}; // default to current if bad input
|
||||
Multi_sorts_changed();
|
||||
}
|
||||
private void Multi_sorts_changed() {
|
||||
Xow_domain_crt_itm[] ary = search_api.Multi_sorts_crt(wiki_domain);
|
||||
if (ary == null) return; // default to no sort if bad input
|
||||
Xow_domain_sorter__manual sorter = new Xow_domain_sorter__manual(wiki_domain, ary);
|
||||
Xow_domain_sorter__manual.Sort(sorter, search_domain_ary);
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Xoapi_search.Evt_multi_wikis_changed)) Multi_wikis_changed();
|
||||
else if (ctx.Match(k, Xoapi_search.Evt_multi_sorts_changed)) Multi_sorts_changed();
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
public static final byte Match_tid_all = 0, Match_tid_bgn = 1;
|
||||
public static final byte Version_null = 0, Version_1 = 1, Version_2 = 2;
|
||||
private static final byte[] Qarg__fulltext = Bry_.new_a7("fulltext"), Qarg__fulltext__y = Bry_.new_a7("y");
|
||||
@@ -123,6 +95,17 @@ public class Srch_special_page implements Xow_special_page, Gfo_invk, Gfo_evt_it
|
||||
}
|
||||
return (Xow_domain_itm[])rv.To_ary_and_clear(Xow_domain_itm.class);
|
||||
}
|
||||
private static Xow_domain_itm[] Get_domains(Xoae_app app, Srch_special_cfg cfg, Xow_domain_itm wiki_domain) {
|
||||
Xow_domain_crt_itm crt = cfg.Multi_wikis_crt(wiki_domain);
|
||||
Xow_domain_itm[] rv = Get_by_crt(app.Usere().Wiki().Xwiki_mgr(), wiki_domain, crt);
|
||||
if (rv.length == 0) rv = new Xow_domain_itm[] {wiki_domain}; // default to current if bad input
|
||||
|
||||
Xow_domain_crt_itm[] ary = cfg.Multi_sorts_crt(wiki_domain);
|
||||
if (ary == null) return Xow_domain_itm_.Ary_empty; // default to no sort if bad input
|
||||
Xow_domain_sorter__manual sorter = new Xow_domain_sorter__manual(wiki_domain, ary);
|
||||
Xow_domain_sorter__manual.Sort(sorter, rv);
|
||||
return rv;
|
||||
}
|
||||
|
||||
public Xow_special_page Special__clone() {return this;}
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ class Srch_html_page_bldr_fxt {
|
||||
}
|
||||
public void Test_paging(boolean fwd, int slab_idx, String expd) {
|
||||
byte[] search_orig = Bry_.new_a7("A");
|
||||
Srch_search_qry qry = Srch_search_qry.New__search_page(Xow_domain_itm_.Ary_empty, wiki, app.Gui_mgr().Search_cfg(), Bool_.N, search_orig, slab_idx, 100);
|
||||
Srch_search_qry qry = Srch_search_qry.New__search_page(Xow_domain_itm_.Ary_empty, wiki, app.Addon_mgr().Itms__search__special().Ns_mgr(), Bool_.N, search_orig, slab_idx, 100);
|
||||
html_mgr.Init_by_wiki(wiki, wiki.Lang().Num_mgr(), qry);
|
||||
byte[] paging_link = html_mgr.Bld_paging_link(fwd);
|
||||
Tfds.Eq(expd, String_.new_a7(paging_link));
|
||||
|
||||
Reference in New Issue
Block a user