1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00

Cfg: Refactor 'Gui - Url bar'; Add better support for buttons

This commit is contained in:
gnosygnu
2016-12-21 23:29:44 -05:00
parent 74fefed754
commit f12e3f5318
14 changed files with 92 additions and 119 deletions

View File

@@ -31,26 +31,23 @@ public class Xocfg_mgr {
, app.User().User_db_mgr().Conn());
dflt_mgr.Init_by_app(app);
}
public void Bind_many_app (Gfo_invk sub, String... keys) {Bind_many(sub, Xocfg_mgr.Ctx__app, keys);}
public void Bind_many_wiki (Gfo_invk sub, Xow_wiki wiki, String... keys) {Bind_many(sub, wiki.Domain_itm().Abrv_xo_str(), keys);}
public void Bind_many(Gfo_invk sub, String ctx, String... keys) {
public void Sub_many_app (Gfo_invk sub, String... keys) {Bind_many(Bool_.N, sub, Xocfg_mgr.Ctx__app, keys);}
public void Bind_many_app (Gfo_invk sub, String... keys) {Bind_many(Bool_.Y, sub, Xocfg_mgr.Ctx__app, keys);}
public void Bind_many_wiki (Gfo_invk sub, Xow_wiki wiki, String... keys) {Bind_many(Bool_.Y, sub, wiki.Domain_itm().Abrv_xo_str(), keys);}
private void Bind_many(boolean pub, Gfo_invk sub, String ctx, String... keys) {
try {
for (String key : keys) {
String val = Bind_str(ctx, key, sub);
cache_mgr.Pub(ctx, key, val);
cache_mgr.Sub(sub, ctx, key, key);
if (pub) {
String val = cache_mgr.Get(ctx, key);
cache_mgr.Pub(ctx, key, val);
}
}
}
catch (Exception e) {
Gfo_usr_dlg_.Instance.Warn_many("", "", "bind failed: ctx=~{0} keys=~{1} err=~{2}", ctx, String_.AryXtoStr(keys), Err_.Message_gplx_log(e));
}
}
public boolean Bind_bool_app(String key, Gfo_invk sub) {return Yn.parse_or(Bind_str(Xocfg_mgr.Ctx__app, key, sub), false);}
public boolean Bind_bool(Xow_wiki wiki, String key, Gfo_invk sub) {return Yn.parse_or(Bind_str(wiki, key, sub), false);}
public String Bind_str(Xow_wiki wiki, String key, Gfo_invk sub) {return Bind_str(wiki.Domain_itm().Abrv_xo_str(), key, sub);}
public String Bind_str(String ctx, String key, Gfo_invk sub) {
cache_mgr.Sub(sub, ctx, key, key);
return cache_mgr.Get(ctx, key);
}
public boolean Get_bool_app_or(String key, boolean or) {
String rv = Get_str(Ctx__app, key);
return rv == null ? or : Yn.parse_or(rv, or);

View File

@@ -51,7 +51,8 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
this.val = val;
this.date = date;
this.edited = true;
if (String_.Has(gui_args, "read"+"only=") || String_.Has(gui_args, "disabled="))
if ( String_.Has(gui_args, "read"+"only=") || String_.Has(gui_args, "disabled=")
|| String_.Eq(gui_type, gplx.xowa.addons.apps.cfgs.enums.Xoitm_gui_tid.Itm__btn.Key()))
edited = false;
}
public void Set_data_by_dflt() {

View File

@@ -69,7 +69,7 @@ public class Xoedit_itm_html {
, gui_type_key, gui_args, key, lines[1]);
break;
case Xoitm_gui_tid.Tid__btn:
bfr.Add_str_u8_fmt("<input id=\"{2}\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}\" class=\"xocfg__btn\" type=\"button\"{1}{3}></input>", gui_type_key, gui_args, key, key);
bfr.Add_str_u8_fmt("<button id=\"{2}\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}\" class=\"xocfg__btn\" {1}>{3}</button>", gui_type_key, gui_args, key, name);
break;
default:
break;

View File

@@ -28,7 +28,7 @@ public class Srch_urlbar_mgr implements Gfo_invk { // NOTE: needs to be app-leve
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 Srch_crt_scanner_syms syms = Srch_crt_scanner_syms.New__dflt();
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
@@ -76,7 +76,7 @@ public class Srch_urlbar_mgr implements Gfo_invk { // NOTE: needs to be app-leve
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_search_qry qry = Srch_search_qry.New__url_bar(wiki, ns_mgr, syms, 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);
@@ -93,12 +93,12 @@ public class Srch_urlbar_mgr implements Gfo_invk { // NOTE: needs to be app-leve
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"
Cfg__enabled = "xowa.gui.urlbar.search.enabled"
, Cfg__max_results = "xowa.gui.urlbar.search.max_results"
, Cfg__auto_wildcard = "xowa.gui.urlbar.search.auto_wildcard"
, Cfg__ns_ids = "xowa.gui.urlbar.search.ns_ids"
, Cfg__symbols = "xowa.gui.urlbar.search.symbols"
, Cfg__visible_rows = "xowa.gui.urlbar.search.visible_rows"
, Cfg__jump_len = "xowa.gui.urlbar.search.jump_len"
;
}

View File

@@ -31,7 +31,7 @@ public class Srch_search_mgr {
private int search_count;
public Srch_search_mgr(Srch_search_addon addon, Xow_wiki wiki, Srch_text_parser parser) {
this.addon = addon; this.wiki = wiki;
crt_parser = new Srch_crt_parser(Scanner_syms);
crt_parser = new Srch_crt_parser(Srch_crt_scanner_syms.Dflt); // NOTE: hard-coded to dflt; should change to use qry.Phrase.Syms, but requires more work
// init cur_cmds with Noop cmd to make cancel logic below easier
int len = Srch_search_qry.Tid_len;
@@ -70,7 +70,7 @@ public class Srch_search_mgr {
public void Search_async(Cancelable cxl, Srch_search_qry qry, Srch_crt_mgr crt_mgr, Srch_rslt_cbk rslt_cbk, Srch_rslt_list rslts_list) {
synchronized (mutex) { // force only one search at a time; do not (a) place around Thread_sleep; (b) reuse for any other locks
if (++search_count > 64) this.Clear(); // lazy way of clearing memory
Srch_search_ctx ctx = new Srch_search_ctx(cxl, wiki, addon, cache__page, cache__word_counts, qry, Scanner_syms, crt_mgr, rslts_list);
Srch_search_ctx ctx = new Srch_search_ctx(cxl, wiki, addon, cache__page, cache__word_counts, qry, qry.Phrase.Syms, crt_mgr, rslts_list);
ctx.Score_rng.Select_init(ctx.Rslts_needed, rslts_list.Score_bgn, rslts_list.Score_len, Srch_link_wkr.Percentile_rng__calc_adj(crt_mgr.Words_nth__len()));
page_tbl_searcher.Search(ctx, rslt_cbk);
if (cxl.Canceled()) return;
@@ -85,5 +85,4 @@ public class Srch_search_mgr {
cache__word_counts.Clear();
cache__rslts.Clear();
}
public static final Srch_crt_scanner_syms Scanner_syms = Srch_crt_scanner_syms.Dflt;
}

View File

@@ -19,27 +19,29 @@ package gplx.xowa.addons.wikis.searchs.searchers; import gplx.*; import gplx.xow
import gplx.core.btries.*;
import gplx.xowa.addons.wikis.searchs.searchers.crts.*;
public class Srch_search_phrase {
public Srch_search_phrase(boolean wildcard, byte[] orig, byte[] compiled) {
public Srch_search_phrase(boolean wildcard, byte[] orig, byte[] compiled, Srch_crt_scanner_syms syms) {
this.Orig = orig;
this.Compiled = compiled;
this.Wildcard = wildcard;
this.Syms = syms;
}
public final boolean Wildcard;
public final byte[] Orig; // EX: "Earth"
public final byte[] Compiled; // EX: "earth*"
public final Srch_crt_scanner_syms Syms;
public static Srch_search_phrase New(gplx.xowa.langs.cases.Xol_case_mgr case_mgr, byte[] orig, boolean wildcard) {
public static Srch_search_phrase New(gplx.xowa.langs.cases.Xol_case_mgr case_mgr, Srch_crt_scanner_syms syms, boolean auto_wildcard, byte[] orig) {
int orig_len = orig.length;
if ( orig_len > 0 // if "*" at end, remove and change to wildcard; needed for Special:Search which will send in "earth*" but "earth" needed for highlighting
&& orig[orig_len - 1] == Srch_crt_scanner_syms.Dflt.Wild()) {
&& orig[orig_len - 1] == syms.Wild()) {
orig = Bry_.Mid(orig, 0, orig_len - 1);
wildcard = true;
auto_wildcard = true;
}
byte[] lcase = case_mgr.Case_build_lower(orig);
lcase = Auto_wildcard(lcase, Srch_crt_scanner_syms.Dflt);
return new Srch_search_phrase(wildcard, orig, lcase);
lcase = Auto_wildcard(lcase, auto_wildcard, syms);
return new Srch_search_phrase(auto_wildcard, orig, lcase, syms);
}
public static byte[] Auto_wildcard(byte[] raw, Srch_crt_scanner_syms syms) {
public static byte[] Auto_wildcard(byte[] raw, boolean auto_wildcard, Srch_crt_scanner_syms syms) {
Btrie_slim_mgr trie = syms.Trie();
int raw_len = raw.length;
int insert_pos = -1;
@@ -118,7 +120,8 @@ public class Srch_search_phrase {
}
// add wildcard
if (insert_pos == raw_len - 1) return Bry_.Add(raw, syms.Wild());
if (insert_pos == raw_len - 1)
return auto_wildcard ? Bry_.Add(raw, syms.Wild()) : raw;
else {
byte[] rv = new byte[raw_len + 1];
int wildcard_pos = insert_pos + 1;

View File

@@ -34,13 +34,15 @@ public class Srch_search_phrase_tst {
@Test public void Escape() {fxt.Test__auto_wildcard("\\*" , "\\**");}
@Test public void Escape__incomplete() {fxt.Test__auto_wildcard("a\\" , "a\\");}
@Test public void Escape__escaped() {fxt.Test__auto_wildcard("a\\\\" , "a\\\\*");}
@Test public void Auto_wildcard_n() {fxt.Init__auto_wildcard_n_().Test__auto_wildcard("a", "a");}
}
class Srch_search_phrase_fxt {
private final Srch_crt_scanner_syms syms = Srch_crt_scanner_syms.Dflt;
public Srch_search_phrase_fxt() {}
private boolean auto_wildcard = true;
public Srch_search_phrase_fxt Init__auto_wildcard_n_() {this.auto_wildcard = false; return this;}
public void Test__auto_wildcard(String src_str, String expd) {
byte[] src_raw = Bry_.new_u8(src_str);
byte[] actl = Srch_search_phrase.Auto_wildcard(src_raw, syms);
byte[] actl = Srch_search_phrase.Auto_wildcard(src_raw, auto_wildcard, syms);
Tfds.Eq(expd, String_.new_u8(actl));
}
}

View File

@@ -18,6 +18,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.*;
import gplx.xowa.addons.wikis.searchs.searchers.crts.*;
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;
@@ -33,19 +34,19 @@ 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, 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__url_bar(Xow_wiki wiki, Srch_ns_mgr ns_mgr, Srch_crt_scanner_syms syms, 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(), syms, auto_wildcard, search_orig), 0, max_results);
}
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);
return new Srch_search_qry(Tid__suggest_box, ns_mgr, Srch_search_phrase.New(wiki.Case_mgr(), Srch_crt_scanner_syms.Dflt, Bool_.Y, search_orig), 0, results_max);
}
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, 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(), Srch_crt_scanner_syms.Dflt, wildcard, search_orig), 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);
return new Srch_search_qry(Tid__android, ns_mgr, Srch_search_phrase.New(wiki.Case_mgr(), Srch_crt_scanner_syms.Dflt, Bool_.Y, search_orig), slab_bgn, slab_end);
}
}

View File

@@ -92,11 +92,13 @@ public class Srch_crt_scanner_syms {
if (b == Byte_ascii.Null) return;
rv.Add_bry_byte(b, tid);
}
public static final Srch_crt_scanner_syms Dflt =
new Srch_crt_scanner_syms
public static Srch_crt_scanner_syms New__dflt() {
return new Srch_crt_scanner_syms
( Byte_ascii.Backslash, Byte_ascii.Space, Byte_ascii.Quote, Byte_ascii.Dash, Byte_ascii.Plus, Byte_ascii.Comma
, Byte_ascii.Paren_bgn, Byte_ascii.Paren_end, Byte_ascii.Star
);
}
public static final Srch_crt_scanner_syms Dflt = New__dflt();
private static byte Parse__val(byte[] line, int val_bgn, int line_len) {
if (line_len - val_bgn == 1) return line[val_bgn];
if ( line_len - val_bgn == 2