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:
@@ -16,6 +16,7 @@ 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; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.xowa.addons.wikis.searchs.gui.urlbars.*; import gplx.xowa.addons.wikis.searchs.gui.htmlbars.*; import gplx.xowa.addons.wikis.searchs.specials.*;
|
||||
public class Xoax_addon_mgr {
|
||||
private final Ordered_hash hash = Ordered_hash_.New(); // LOCK: must synchronized else two search tabs will fail on startup
|
||||
public Xoax_addon_itm Itms__get_or_null(String key) {synchronized (hash) {return (Xoax_addon_itm)hash.Get_by(key);}}
|
||||
@@ -30,6 +31,15 @@ public class Xoax_addon_mgr {
|
||||
// Xoa_app_.Usr_dlg().Log_many("", "", "addons.init: ~{0}", addon_key);
|
||||
}
|
||||
}
|
||||
// HACK: should make separate generic app-level container
|
||||
public Srch_urlbar_mgr Itms__search__urlbar() {return itms__search__urlbar;} private final Srch_urlbar_mgr itms__search__urlbar = new Srch_urlbar_mgr();
|
||||
public Srch_htmlbar_mgr Itms__search__htmlbar() {return itms__search__htmlbar;} private final Srch_htmlbar_mgr itms__search__htmlbar = new Srch_htmlbar_mgr();
|
||||
public Srch_special_cfg Itms__search__special() {return itms__search__special;} private final Srch_special_cfg itms__search__special = new Srch_special_cfg();
|
||||
public void Init_by_kit(Xoae_app app, gplx.gfui.kits.core.Gfui_kit kit) {
|
||||
itms__search__urlbar.Init_by_kit(app, kit);
|
||||
itms__search__htmlbar.Init_by_kit(app, kit);
|
||||
itms__search__special.Init_by_kit(app, kit);
|
||||
}
|
||||
public Xoax_addon_mgr Add_dflts_by_app(Xoa_app app) {
|
||||
app.Bldr().Cmd_regy().Add_many
|
||||
( gplx.xowa.bldrs.cmds.utils.Xob_alert_cmd.Prototype
|
||||
|
||||
@@ -16,7 +16,7 @@ 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.apps.cfgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*;
|
||||
import gplx.dbs.*; import gplx.xowa.addons.apps.cfgs.mgrs.caches.*; import gplx.xowa.addons.apps.cfgs.mgrs.dflts.*; import gplx.xowa.addons.apps.cfgs.mgrs.types.*;
|
||||
import gplx.dbs.*; import gplx.xowa.addons.apps.cfgs.mgrs.caches.*; import gplx.xowa.addons.apps.cfgs.mgrs.dflts.*; import gplx.xowa.addons.apps.cfgs.mgrs.types.*; import gplx.xowa.addons.apps.cfgs.mgrs.execs.*;
|
||||
public class Xocfg_mgr {
|
||||
private final Xocfg_cache_mgr cache_mgr = new Xocfg_cache_mgr();
|
||||
public Xocfg_mgr() {
|
||||
@@ -24,6 +24,7 @@ public class Xocfg_mgr {
|
||||
}
|
||||
public Xocfg_type_mgr Type_mgr() {return type_mgr;} private final Xocfg_type_mgr type_mgr = new Xocfg_type_mgr();
|
||||
public Xocfg_dflt_mgr Dflt_mgr() {return dflt_mgr;} private final Xocfg_dflt_mgr dflt_mgr;
|
||||
public Xocfg_exec_mgr Exec_mgr() {return exec_mgr;} private final Xocfg_exec_mgr exec_mgr = new Xocfg_exec_mgr();
|
||||
public void Init_by_app(Xoa_app app) {
|
||||
cache_mgr.Init_by_app
|
||||
( gplx.xowa.addons.apps.cfgs.dbs.Xocfg_db_app.New_conn(app)
|
||||
@@ -62,6 +63,10 @@ public class Xocfg_mgr {
|
||||
String rv = cache_mgr.Get_or(Ctx__app, key, null);
|
||||
return rv == null ? or : Int_.parse_or(rv, or);
|
||||
}
|
||||
public long Get_long_app_or(String key, long or) {
|
||||
String rv = cache_mgr.Get_or(Ctx__app, key, null);
|
||||
return rv == null ? or : Long_.parse_or(rv, or);
|
||||
}
|
||||
public String Get_str_app_or(String key, String or) {return cache_mgr.Get_or(Ctx__app, key, or);}
|
||||
public String Get_str_app(String key) {return Get_str(Xocfg_mgr.Ctx__app, key);}
|
||||
public boolean Get_bool_or(String ctx, String key, boolean or) {
|
||||
|
||||
@@ -69,6 +69,7 @@ public class Xoitm_gui_tid {
|
||||
else if (String_.Eq(db_type, "memo")) return Itm__memo.key;
|
||||
else if (String_.Eq(db_type, "io.cmd")) return Itm__io_cmd.key;
|
||||
else if (String_.Has_at_bgn(db_type, "list:")) return Itm__list.key;
|
||||
else if (String_.Eq(db_type, "btn")) return Itm__btn.key;
|
||||
else return Itm__str.key;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
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.apps.cfgs.mgrs.execs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.mgrs.*;
|
||||
public class Xocfg_exec_mgr {
|
||||
private final Ordered_hash hash = Ordered_hash_.New();
|
||||
public void Add(Gfo_invk invk, String... cmds) {
|
||||
for (String cmd : cmds) {
|
||||
hash.Add(cmd, invk);
|
||||
}
|
||||
}
|
||||
public void Exec(String cmd, Object... args) {
|
||||
Gfo_invk invk = (Gfo_invk)hash.Get_by(cmd);
|
||||
|
||||
// create msg and add args
|
||||
GfoMsg msg = GfoMsg_.new_parse_(cmd);
|
||||
int args_len = args.length;
|
||||
if (args_len > 0) {
|
||||
for (int i = 0; i < args_len; i += 2) {
|
||||
msg.Add((String)args[i], args[i + 1]);
|
||||
}
|
||||
}
|
||||
Gfo_invk_.Invk_by_msg(invk, cmd, msg);
|
||||
}
|
||||
}
|
||||
@@ -23,13 +23,13 @@ public class Xocfg_type_mgr {
|
||||
this.Lists__add("list:xowa.app.startup.window.mode", "previous", "maximized", "absolute", "relative", "default");
|
||||
this.Lists__add("list:xowa.app.startup.pages.type", "blank", "xowa", "previous", "custom");
|
||||
this.Lists__add("list:xowa.gui.window.html_box.adj_type", "none", "relative", "absolute");
|
||||
this.Lists__add("list:xowa.wiki.database.general.zip_mode", "text", "gzip", "bzip2", "xz");
|
||||
this.Lists__add("list:xowa.wiki.database.zip_mode", "text", "gzip", "bzip2", "xz");
|
||||
this.Lists__add("list:xowa.html.wiki.portal.missing_class", Keyval_.new_("", "Show as blue link"), Keyval_.new_("new", "Show as red link"), Keyval_.new_("xowa_display_none", "Hide"));
|
||||
this.Lists__add("list:xowa.html.category.basic.missing_class", "normal", "hide", "red_link");
|
||||
this.Lists__add("list:xowa.html.tidy.general.engine", "tidy", "jtidy");
|
||||
this.Lists__add("list:xowa.addon.http_server.general.file_retrieve_mode", Keyval_.new_("wait"), Keyval_.new_("skip"), Keyval_.new_("async_server", "async server"));
|
||||
this.Lists__add("list:xowa.addon.http_server.file_retrieve_mode", Keyval_.new_("wait"), Keyval_.new_("skip"), Keyval_.new_("async_server", "async server"));
|
||||
this.Lists__add("list:xowa.addon.search_suggest.html_bar.search_mode", "Search", "AllPages", "AllPages_(v2)");
|
||||
this.Lists__add("list:xowa.addon.math.general.renderer", "MathJax", "LaTeX");
|
||||
this.Lists__add("list:xowa.addon.math.renderer", Keyval_.new_("mathjax","MathJax"), Keyval_.new_("latex", "LaTeX"));
|
||||
this.Lists__add("list:xowa.addon.scribunto.general.engine", "luaj", "lua");
|
||||
}
|
||||
public void Lists__add(String key, String... vals) {
|
||||
|
||||
@@ -55,6 +55,9 @@ public class Xoedit_itm_html {
|
||||
( "<input class=\"xocfg__io_cmd__arg__txt\" id=\"{1}-arg\" data-xocfg-key=\"{1}\" data-xocfg-gui=\"{0}-arg\" accesskey=\"d\" type=\"text\" value='{2}'>\n"
|
||||
, gui_type_key, key, lines[1]);
|
||||
break;
|
||||
case Xoitm_gui_tid.Tid__btn:
|
||||
bfr.Add_str_u8_fmt("<input id=\"{1}\" data-xocfg-key=\"{1}\" data-xocfg-gui=\"{0}\" class=\"xocfg__btn\" type=\"button\"{2}></input>", gui_type_key, key, key);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -19,8 +19,10 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.pages; import gplx.*; import g
|
||||
import gplx.xowa.specials.*; import gplx.langs.mustaches.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.tags.*;
|
||||
import gplx.xowa.addons.apps.cfgs.specials.edits.services.*; import gplx.xowa.addons.apps.cfgs.specials.edits.objs.*;
|
||||
class Xocfg_edit_html extends Xow_special_wtr__base {
|
||||
private final Xocfg_edit_loader loader;
|
||||
private final String grp, ctx, lang;
|
||||
public Xocfg_edit_html(String grp, String ctx, String lang) {
|
||||
public Xocfg_edit_html(Xocfg_edit_loader loader, String grp, String ctx, String lang) {
|
||||
this.loader = loader;
|
||||
this.grp = grp;
|
||||
this.ctx = ctx;
|
||||
this.lang = lang;
|
||||
@@ -28,8 +30,7 @@ class Xocfg_edit_html extends Xow_special_wtr__base {
|
||||
@Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "app", "cfg", "edit");}
|
||||
@Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xo.cfg_edit.page.mustache.html");}
|
||||
@Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) {
|
||||
Xocfg_edit_loader mgr = Xocfg_edit_loader.New(app);
|
||||
return mgr.Load_root(grp, ctx, lang);
|
||||
return loader.Load_root(grp, ctx, lang);
|
||||
}
|
||||
@Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) {
|
||||
Xopg_tag_mgr head_tags = page_data.Head_tags();
|
||||
|
||||
@@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.apps.cfgs.specials.edits.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*;
|
||||
import gplx.xowa.specials.*; import gplx.core.net.qargs.*;
|
||||
import gplx.xowa.addons.apps.cfgs.specials.edits.services.*;
|
||||
public class Xocfg_edit_special implements Xow_special_page {
|
||||
public void Special__gen(Xow_wiki wiki, Xoa_page page, Xoa_url url, Xoa_ttl ttl) {
|
||||
Gfo_qarg_mgr url_args = new Gfo_qarg_mgr().Init(url.Qargs_ary());
|
||||
@@ -25,10 +26,16 @@ public class Xocfg_edit_special implements Xow_special_page {
|
||||
String ctx = url_args.Read_str_or("ctx", "app");
|
||||
String lang = url_args.Read_str_or("lang", wiki.App().User().Wikii().Lang().Key_str());
|
||||
|
||||
Xocfg_edit_loader loader = Xocfg_edit_loader.New(wiki.App());
|
||||
if (String_.Eq(grp, "")) {
|
||||
grp = wiki.App().Cfg().Get_str_app("xowa.app.cfg.recent_page");
|
||||
if (!loader.Grp_key_exists(grp)) {
|
||||
grp = "xowa.app.security";
|
||||
Gfo_usr_dlg_.Instance.Warn_many("", "", "cfg:grp_key not found; defaulting to xowa.app.security; key=~{0}", grp);
|
||||
}
|
||||
|
||||
}
|
||||
new Xocfg_edit_html(grp, ctx, lang).Bld_page_by_mustache(wiki.App(), page, this);
|
||||
new Xocfg_edit_html(loader, grp, ctx, lang).Bld_page_by_mustache(wiki.App(), page, this);
|
||||
}
|
||||
|
||||
Xocfg_edit_special(Xow_special_meta special__meta) {this.special__meta = special__meta;}
|
||||
|
||||
@@ -31,6 +31,8 @@ public class Xocfg_edit_loader {
|
||||
this.type_mgr = type_mgr;
|
||||
this.dflt_mgr = dflt_mgr;
|
||||
}
|
||||
public boolean Grp_key_exists(String grp_key) {return db_app.Tbl__grp().Select_by_key_or_null(grp_key) != null;
|
||||
}
|
||||
public Xoedit_root Load_root(String grp_key, String ctx, String lang) {
|
||||
// create lists
|
||||
Ordered_hash grp_temp = Ordered_hash_.New();
|
||||
|
||||
@@ -30,7 +30,7 @@ public class Xoscript_mgr {
|
||||
}
|
||||
public void Write(Bry_bfr rv, Xow_wiki wiki, Xoa_page page) {
|
||||
// init
|
||||
if (!wiki.App().Api_root().Addon().App__scripting__enabled()) return;
|
||||
if (!wiki.Html__wtr_mgr().Scripting_enabled()) return;
|
||||
this.Init(wiki);
|
||||
if (xtn_mgr == null) return;
|
||||
|
||||
|
||||
@@ -22,8 +22,8 @@ class Xob_hdump_tbl_retriever__ns_to_db implements Xob_hdump_tbl_retriever {
|
||||
private final Xob_ns_to_db_mgr ns_to_db_mgr;
|
||||
public Xob_hdump_tbl_retriever__ns_to_db(Xowe_wiki wiki) {
|
||||
Xow_db_mgr core_data_mgr = wiki.Db_mgr_as_sql().Core_data_mgr();
|
||||
this.ns_to_db_mgr = new Xob_ns_to_db_mgr(new Xob_ns_to_db_wkr__html(core_data_mgr.Db__core()), core_data_mgr, wiki.Appe().Api_root().Bldr().Wiki().Import().Html_db_max());
|
||||
Xob_ns_file_itm.Init_ns_bldr_data(Xow_db_file_.Tid__html_data, wiki.Ns_mgr(), gplx.xowa.apps.apis.xowa.bldrs.imports.Xoapi_import.Ns_file_map__each);
|
||||
this.ns_to_db_mgr = new Xob_ns_to_db_mgr(new Xob_ns_to_db_wkr__html(core_data_mgr.Db__core()), core_data_mgr, Xobldr_cfg.Max_size__html(wiki.App()));
|
||||
Xob_ns_file_itm.Init_ns_bldr_data(Xow_db_file_.Tid__html_data, wiki.Ns_mgr(), gplx.xowa.bldrs.Xobldr_cfg.Ns_file_map__each);
|
||||
}
|
||||
public Xowd_html_tbl Get_html_tbl(Xow_ns ns, int prv_row_len) {
|
||||
Xow_db_file html_db = ns_to_db_mgr.Get_by_ns(ns.Bldr_data(), prv_row_len); // get html_db
|
||||
|
||||
@@ -66,7 +66,7 @@ public class Xobldr__fsdb_db__create_data extends Xob_cmd__base implements Xob_c
|
||||
wmf_wkr.Fail_timeout_(0); // 1000; NOTE: set Fail_timeout here; DATE:2014-06-21; NOTE: do not put in ctor, or else will be 1st wkr; DATE:2014-06-28
|
||||
}
|
||||
// trg_mnt_itm
|
||||
this.trg_bin_db_max = app.Api_root().Bldr().Wiki().Import().File_db_max();
|
||||
this.trg_bin_db_max = Xobldr_cfg.Max_size__file(app);
|
||||
Io_url trg_file_dir_v1 = String_.Eq(trg_bin_mgr__fsdb_version, "v1") ? wiki.Fsys_mgr().File_dir().GenNewNameOnly(wiki.Domain_str() + "-prv") : wiki.Fsys_mgr().File_dir(); // NOTE: convoluted way of setting trg to -prv if trg_bin_mgr__fsdb_version_v1 is set; otherwise set to "en.wikipedia.org" which will noop; DATE:2015-12-02
|
||||
Fsdb_db_mgr trg_db_mgr = Fsdb_db_mgr_.new_detect(wiki, wiki.Fsys_mgr().Root_dir(), trg_file_dir_v1);
|
||||
if (trg_db_mgr == null) trg_db_mgr = Fsdb_db_mgr__v2_bldr.Get_or_make(wiki, Bool_.Y);
|
||||
|
||||
@@ -27,7 +27,7 @@ class Xomp_html_db_wtr {
|
||||
private Xob_ns_file_itm ns_itm;
|
||||
public Xomp_html_db_wtr(Xowe_wiki wiki) {
|
||||
this.wiki = wiki; this.db_mgr = wiki.Data__core_mgr();
|
||||
this.len_max = wiki.Appe().Api_root().Bldr().Wiki().Import().Html_db_max();
|
||||
this.len_max = gplx.xowa.bldrs.Xobldr_cfg.Max_size__html(wiki.App());
|
||||
}
|
||||
public int Cur_db_id() {return html_db.Id();}
|
||||
public Xowd_html_tbl Tbls__get_or_new(int ns_id, long html_len) {
|
||||
|
||||
@@ -17,46 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.wikis.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.*;
|
||||
public class Xoa_ctg_mgr implements Gfo_invk {
|
||||
public void Init_by_app(Xoae_app app) {}
|
||||
public boolean Pagecats_grouping_enabled() {return pagecats_grouping_enabled;} private boolean pagecats_grouping_enabled = false;
|
||||
public byte Missing_ctg_cls_tid() {return missing_ctg_cls_tid;} private byte missing_ctg_cls_tid = Missing_ctg_cls_red_tid;
|
||||
public byte[] Missing_ctg_cls_css() {
|
||||
switch (missing_ctg_cls_tid) {
|
||||
case Missing_ctg_cls_normal_tid: return Missing_ctg_cls_normal_css;
|
||||
case Missing_ctg_cls_hide_tid: return Missing_ctg_cls_hide_css;
|
||||
case Missing_ctg_cls_red_tid: return Missing_ctg_cls_red_css;
|
||||
default: throw Err_.new_unhandled(missing_ctg_cls_tid);
|
||||
}
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_missing_ctg_cls)) return Missing_ctg_cls_tid_print(missing_ctg_cls_tid);
|
||||
else if (ctx.Match(k, Invk_missing_ctg_cls_)) missing_ctg_cls_tid = Missing_ctg_cls_tid_parse(m.ReadStr("v"));
|
||||
else if (ctx.Match(k, Invk_missing_ctg_cls_list)) return Options_missing_ctg_cls_list;
|
||||
else if (ctx.Match(k, Invk_pagecats_grouping_enabled)) return Yn.To_str(pagecats_grouping_enabled);
|
||||
else if (ctx.Match(k, Invk_pagecats_grouping_enabled_)) pagecats_grouping_enabled = m.ReadYn("v");
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String Invk_missing_ctg_cls = "missing_ctg_cls", Invk_missing_ctg_cls_ = "missing_ctg_cls_", Invk_missing_ctg_cls_list = "missing_ctg_cls_list", Invk_pagecats_grouping_enabled = "pagecats_grouping_enabled", Invk_pagecats_grouping_enabled_ = "pagecats_grouping_enabled_";
|
||||
private static final byte Missing_ctg_cls_normal_tid = 0, Missing_ctg_cls_hide_tid = 1, Missing_ctg_cls_red_tid = 2;
|
||||
private static final String Missing_ctg_cls_normal_str = "normal", Missing_ctg_cls_hide_str = "hide", Missing_ctg_cls_red_str = "red_link";
|
||||
private static final byte[] Missing_ctg_cls_normal_css = Bry_.new_a7(".xowa-missing-category-entry {}"), Missing_ctg_cls_hide_css = Bry_.new_a7(".xowa-missing-category-entry {display: none;}"), Missing_ctg_cls_red_css = Bry_.new_a7(".xowa-missing-category-entry {color: red;}");
|
||||
private static Keyval[] Options_missing_ctg_cls_list = Keyval_.Ary(Keyval_.new_(Missing_ctg_cls_normal_str), Keyval_.new_(Missing_ctg_cls_hide_str), Keyval_.new_(Missing_ctg_cls_red_str));
|
||||
private static byte Missing_ctg_cls_tid_parse(String v) {
|
||||
if (String_.Eq(v, Missing_ctg_cls_normal_str)) return Missing_ctg_cls_normal_tid;
|
||||
else if (String_.Eq(v, Missing_ctg_cls_hide_str)) return Missing_ctg_cls_hide_tid;
|
||||
else if (String_.Eq(v, Missing_ctg_cls_red_str)) return Missing_ctg_cls_red_tid;
|
||||
else throw Err_.new_unhandled(v);
|
||||
}
|
||||
private static String Missing_ctg_cls_tid_print(byte v) {
|
||||
switch (v) {
|
||||
case Missing_ctg_cls_normal_tid: return Missing_ctg_cls_normal_str;
|
||||
case Missing_ctg_cls_hide_tid: return Missing_ctg_cls_hide_str;
|
||||
case Missing_ctg_cls_red_tid: return Missing_ctg_cls_red_str;
|
||||
default: throw Err_.new_unhandled(v);
|
||||
}
|
||||
}
|
||||
public class Xoa_ctg_mgr {
|
||||
public static final byte Version_null = Byte_.Zero, Version_1 = 1, Version_2 = 2;
|
||||
public static final byte Tid__subc = 0, Tid__file = 1, Tid__page = 2, Tid___max = 3; // SERIALIZED; cat_link.cl_type_id
|
||||
public static final byte Hidden_n = Byte_.Zero, Hidden_y = (byte)1;
|
||||
|
||||
@@ -25,7 +25,8 @@ public class Xoctg_catpage_mgr implements Gfo_invk {
|
||||
private final Hash_adp_bry cache = Hash_adp_bry.cs();
|
||||
private final Xoctg_catpage_loader loader = new Xoctg_catpage_loader();
|
||||
private final Xoctg_fmt_grp fmt_subcs = Xoctg_fmt_grp.New__subc(), fmt_pages = Xoctg_fmt_grp.New__page(), fmt_files = Xoctg_fmt_grp.New__file();
|
||||
private final Uca_ltr_extractor ltr_extractor = new Uca_ltr_extractor(true);
|
||||
private final Uca_ltr_extractor ltr_extractor = new Uca_ltr_extractor(true);
|
||||
private String missing_cls = Str__missing_cls__red;
|
||||
public int Grp_max() {return grp_max;} private int grp_max = Grp_max_dflt;
|
||||
public Xoctg_catpage_mgr(Xow_wiki wiki) {
|
||||
this.wiki = wiki;
|
||||
@@ -40,6 +41,12 @@ public class Xoctg_catpage_mgr implements Gfo_invk {
|
||||
default: throw Err_.new_unhandled(tid);
|
||||
}
|
||||
}
|
||||
public byte[] Missing_ctg_cls_css() {
|
||||
if (String_.Eq(missing_cls, Str__missing_cls__normal)) return Css__missing_cls__normal;
|
||||
else if (String_.Eq(missing_cls, Str__missing_cls__hide)) return Css__missing_cls__hide;
|
||||
else if (String_.Eq(missing_cls, Str__missing_cls__red)) return Css__missing_cls__red;
|
||||
else throw Err_.new_unhandled(missing_cls);
|
||||
}
|
||||
public void Free_mem_all() {cache.Clear();}
|
||||
public Xoctg_catpage_ctg Get_or_load_or_null(byte[] page_ttl, Xoctg_catpage_url catpage_url, Xoa_ttl cat_ttl, int limit) {
|
||||
// load categories from cat dbs; exit if not found
|
||||
@@ -81,10 +88,15 @@ public class Xoctg_catpage_mgr implements Gfo_invk {
|
||||
public void Grp_max_(int v) {grp_max = v;} // TEST:
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk__collation_)) collation_mgr.Collation_name_(m.ReadStr("v"));
|
||||
else if (ctx.Match(k, Cfg__missing_class)) missing_cls = m.ReadStr("v");
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
} private static final String Invk__collation_ = "collation_";
|
||||
|
||||
public static int Grp_max_dflt = 200;
|
||||
private static final Object thread_lock = new Object();
|
||||
|
||||
private static final String Cfg__missing_class = "xowa.category.html.missing_class";
|
||||
private static final String Str__missing_cls__normal = "normal", Str__missing_cls__hide = "hide", Str__missing_cls__red = "red_link";
|
||||
private static final byte[] Css__missing_cls__normal = Bry_.new_a7(".xowa-missing-category-entry {}"), Css__missing_cls__hide = Bry_.new_a7(".xowa-missing-category-entry {display: none;}"), Css__missing_cls__red = Bry_.new_a7(".xowa-missing-category-entry {color: red;}");
|
||||
}
|
||||
|
||||
@@ -19,18 +19,20 @@ package gplx.xowa.addons.wikis.ctgs.htmls.pageboxs; import gplx.*; import gplx.x
|
||||
import gplx.xowa.htmls.core.htmls.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.pageboxs.singles.*; import gplx.xowa.addons.wikis.ctgs.htmls.pageboxs.doubles.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.addons.wikis.ctgs.dbs.*;
|
||||
public class Xoctg_pagebox_wtr {
|
||||
public class Xoctg_pagebox_wtr implements Gfo_invk {
|
||||
private final Xoctg_single_box single_box = new Xoctg_single_box();
|
||||
private final Xoctg_double_box double_box = new Xoctg_double_box();
|
||||
private final Xoctg_pagebox_hash hash = new Xoctg_pagebox_hash();
|
||||
private final Xowd_page_itm tmp_page_itm = new Xowd_page_itm();
|
||||
public boolean Grouping_enabled() {return grouping_enabled;} private boolean grouping_enabled;
|
||||
public void Init_by_wiki(Xow_wiki wiki) {
|
||||
single_box.Init_by_wiki(wiki);
|
||||
double_box.Init_by_wiki(wiki);
|
||||
wiki.App().Cfg().Bind_many_wiki(this, wiki, Cfg__grouping_enabled);
|
||||
}
|
||||
public void Write_pagebox(boolean double_mode, Bry_bfr bfr, Xow_wiki wiki, Xoa_page page, Xoctg_pagebox_itm[] pagebox_itms) {
|
||||
public void Write_pagebox(Bry_bfr bfr, Xow_wiki wiki, Xoa_page page, Xoctg_pagebox_itm[] pagebox_itms) {
|
||||
try {
|
||||
if (double_mode)
|
||||
if (grouping_enabled)
|
||||
double_box.Write_pagebox(bfr, pagebox_itms);
|
||||
else
|
||||
single_box.Write_pagebox(bfr, pagebox_itms);
|
||||
@@ -72,4 +74,10 @@ public class Xoctg_pagebox_wtr {
|
||||
|
||||
return hash.To_ary_and_clear();
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Cfg__grouping_enabled)) this.grouping_enabled = m.ReadYn("v");
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String Cfg__grouping_enabled = "xowa.category.html.grouping_enabled";
|
||||
}
|
||||
|
||||
@@ -21,18 +21,25 @@ import gplx.xowa.htmls.*;
|
||||
import gplx.xowa.addons.wikis.pages.syncs.dbs.*;
|
||||
import gplx.xowa.apps.apis.xowa.addons.bldrs.*;
|
||||
import gplx.xowa.wikis.data.tbls.*;
|
||||
public class Xosync_read_mgr {
|
||||
public class Xosync_read_mgr implements Gfo_invk {
|
||||
private boolean auto_enabled = false;
|
||||
private int auto_interval = 60 * 24; // in minutes
|
||||
private final Xowd_page_itm tmp_dbpg = new Xowd_page_itm();
|
||||
private Db_conn sync_conn; private Xosync_sync_tbl sync_tbl;
|
||||
private final Xopg_match_mgr auto_page_matcher = new Xopg_match_mgr();
|
||||
private final Xosync_update_mgr update_mgr = new Xosync_update_mgr();
|
||||
public void Init_by_wiki(Xow_wiki wiki) {
|
||||
this.Auto_scope_("*:Main_Page");
|
||||
wiki.App().Cfg().Bind_many_wiki(this, wiki, Cfg__auto__enabled, Cfg__auto__interval, Cfg__auto__scope);
|
||||
}
|
||||
public boolean Manual_enabled() {return manual_enabled;} private boolean manual_enabled;
|
||||
public void Auto_update(Xow_wiki wiki, Xoa_page page, Xoa_ttl page_ttl) {
|
||||
if (wiki.Domain_itm().Domain_type_id() == gplx.xowa.wikis.domains.Xow_domain_tid_.Tid__home) return;
|
||||
if (wiki.Domain_itm().Domain_type_id() == gplx.xowa.wikis.domains.Xow_domain_tid_.Tid__other) return;
|
||||
if (page_ttl.Ns().Id_is_special()) return;
|
||||
|
||||
Xoapi_sync_api sync_api = wiki.App().Api_root().Addon().Bldr().Sync();
|
||||
if (!sync_api.Auto_enabled()) return;
|
||||
if (!sync_api.Auto_page_matcher().Match(wiki, page_ttl.Full_db())) return;
|
||||
if (!auto_enabled) return;
|
||||
if (!auto_page_matcher.Match(wiki, page_ttl.Full_db())) return;
|
||||
|
||||
wiki.Data__core_mgr().Db__core().Tbl__page().Select_by_ttl(tmp_dbpg, page_ttl.Ns(), page_ttl.Page_db());
|
||||
|
||||
@@ -43,7 +50,7 @@ public class Xosync_read_mgr {
|
||||
sync_conn.Meta_tbl_assert(sync_tbl);
|
||||
}
|
||||
DateAdp sync_date = sync_tbl.Select_sync_date_or_min(tmp_dbpg.Id());
|
||||
if (Datetime_now.Get().Diff(sync_date).Total_mins().To_int() <= sync_api.Auto_interval()) return;
|
||||
if (Datetime_now.Get().Diff(sync_date).Total_mins().To_int() <= auto_interval) return;
|
||||
|
||||
Xoa_app app = wiki.App();
|
||||
Xoh_page hpg = new Xoh_page();
|
||||
@@ -53,4 +60,21 @@ public class Xosync_read_mgr {
|
||||
|
||||
sync_tbl.Upsert(tmp_dbpg.Id(), Datetime_now.Get());
|
||||
}
|
||||
private void Auto_scope_(String v) {
|
||||
auto_page_matcher.Set(v);
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Cfg__manual__enabled)) this.manual_enabled = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Cfg__auto__enabled)) this.auto_enabled = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Cfg__auto__interval)) this.auto_interval = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Cfg__auto__scope)) Auto_scope_(m.ReadStr("v"));
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
private static final String
|
||||
Cfg__manual__enabled = "xowa.wiki.import.page_sync.manual.enabled"
|
||||
, Cfg__auto__enabled = "xowa.wiki.import.page_sync.auto.enabled"
|
||||
, Cfg__auto__interval = "xowa.wiki.import.page_sync.auto.interval"
|
||||
, Cfg__auto__scope = "xowa.wiki.import.page_sync.auto.scope"
|
||||
;
|
||||
}
|
||||
|
||||
@@ -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