1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2025-06-13 12:54:14 +00:00

Cfg: Convert rest of pages

This commit is contained in:
gnosygnu 2016-12-21 03:07:38 -05:00
parent 68674ace83
commit 93fcec3457
112 changed files with 946 additions and 1386 deletions

View File

@ -149,6 +149,7 @@ public class Xoae_app implements Xoa_app, Gfo_invk {
stage = Xoa_stage_.Tid_init;
user.Init_by_app(this);
cfg.Init_by_app(this);
user.User_db_mgr().Cache_mgr().Init_by_app(this);
misc_mgr.Init_by_app(this);
user.History_mgr().Init_by_app(this);
prog_mgr.Init_by_app(this, url_cmd_eval);
@ -157,13 +158,15 @@ public class Xoae_app implements Xoa_app, Gfo_invk {
html__css_installer.Init_by_app(this);
wiki_mgr.Init_by_app();
gplx.xowa.bldrs.setups.upgrades.Xoa_upgrade_mgr.Check(this);
ctg_mgr.Init_by_app(this);
setup_mgr.Init_by_app(this);
thread_mgr_old.Usr_dlg_(Xoa_app_.Usr_dlg());
html_mgr.Init_by_app(this);
api_root.Init_by_app(this);
wmf_mgr.Init_by_app(this);
gplx.core.net.emails.Gfo_email_mgr_.Instance = gplx.core.net.emails.Gfo_email_mgr_.New_jre();
file_mgr.Init_by_app(this);
special_mgr.Init_by_app(this);
sys_cfg.Init_by_app(this);
}
public boolean Launch_done() {return stage == Xoa_stage_.Tid_launch;}
public void Launch() {

View File

@ -198,7 +198,6 @@ public class Xowe_wiki implements Xow_wiki, Gfo_invk, Gfo_evt_itm {
if (app.Stage() == Xoa_stage_.Tid_launch) init_needed = false; // NOTE: only mark inited if app fully launched; otherwise statements in xowa.gfs can fire and prematurely set home to inited; DATE:2013-03-24
Gfo_log_bfr log_bfr = app.Log_bfr(); log_bfr.Add("wiki.init.bgn: " + domain_str);
app.Cfg_mgr().Init(this);
file_mgr.Cfg_download().Enabled_(app.File_mgr().Wmf_mgr().Enabled()); // default download to app global; can be overriden below
app.Gfs_mgr().Run_url_for(this, tdb_fsys_mgr.Cfg_wiki_stats_fil());
Init_db_mgr();
if (!app.Bldr().Import_marker().Chk(this)) {app.Wiki_mgr().Del(domain_bry); init_needed = false; return;} // NOTE: must call after Db_mgr_create_as_sql(); also, must delete wiki from mgr; DATE:2014-08-24
@ -227,7 +226,6 @@ public class Xowe_wiki implements Xow_wiki, Gfo_invk, Gfo_evt_itm {
app.Html__css_installer().Install(this, Xowd_css_core_mgr.Key_default);
html_mgr.Init_by_wiki(this);
html__hdump_mgr.Init_by_db(this);
this.Copy_cfg(app.Usere().Wiki());
Xow_repo_mgr_.Assert_repos(app, this);
xtn_mgr.Init_by_wiki(this);
log_bfr.Add("wiki.init.end");
@ -237,6 +235,10 @@ public class Xowe_wiki implements Xow_wiki, Gfo_invk, Gfo_evt_itm {
app.Site_cfg_mgr().Load(this);
app.Addon_mgr().Load_by_wiki(this);
ctg_pagebox_wtr.Init_by_wiki(this);
import_mgr.Init_by_wiki(this);
file_mgr.Init_by_wiki(this);
page_mgr.Init_by_wiki(this);
}
public void Rls() {
if (rls_list != null) {
@ -251,7 +253,7 @@ public class Xowe_wiki implements Xow_wiki, Gfo_invk, Gfo_evt_itm {
file_mgr.Rls();
}
public void Init_needed_y_() {this.init_needed = true;}
private void Copy_cfg(Xowe_wiki wiki) {html_mgr.Copy_cfg(wiki.Html_mgr());}
// private void Copy_cfg(Xowe_wiki wiki) {html_mgr.Copy_cfg(wiki.Html_mgr());}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_files)) return file_mgr;
else if (ctx.Match(k, Invk_stats)) return stats;

View File

@ -21,7 +21,7 @@ public class Xowe_wiki_ {
public static void Create(Xowe_wiki wiki, long src_fil_len, String src_fil_name) {
wiki.Db_mgr_create_as_sql(); // create db_mgr as sql
Xoapi_import import_api = wiki.Appe().Api_root().Bldr().Wiki().Import();
Xowd_core_db_props db_mgr_props = import_api.New_props(wiki.Domain_str(), src_fil_len);
Xowd_core_db_props db_mgr_props = gplx.xowa.bldrs.Xobldr_cfg.New_props(wiki.App(), wiki.Domain_str(), src_fil_len);
Xob_info_session info_session = Xob_info_session.new_(import_api.User_name(), wiki.Domain_str(), src_fil_name);
wiki.Data__core_mgr().Init_by_make(db_mgr_props, info_session); // make core_db
}

View File

@ -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

View File

@ -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) {

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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) {

View File

@ -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;
}

View File

@ -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();

View File

@ -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;}

View File

@ -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();

View File

@ -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;

View File

@ -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

View File

@ -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);

View File

@ -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) {

View File

@ -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;

View File

@ -26,6 +26,7 @@ public class Xoctg_catpage_mgr implements Gfo_invk {
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 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;}");
}

View File

@ -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";
}

View File

@ -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"
;
}

View File

@ -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;

View File

@ -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);
}
}
}

View File

@ -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));

View File

@ -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"
;
}

View File

@ -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"
;
}

View File

@ -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);

View File

@ -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));

View File

@ -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")
;
}

View File

@ -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;}
}

View File

@ -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));

View File

@ -30,6 +30,11 @@ public class Xoa_sys_cfg implements Gfo_invk {
}
return this;
} private byte[] lang_key = Xol_lang_itm_.Key_en;
public void Init_by_app(Xoa_app app) {
app.Cfg().Type_mgr().Lists__add("list:" + Cfg__lang, Options_list_lang_.new_());
app.Cfg().Bind_many_app(this, Cfg__lang);
}
private static final String Cfg__lang = "xowa.gui.lang.name";
public int Options_version() {return options_version;} public Xoa_sys_cfg Options_version_(int v) {options_version = v; return this;} private int options_version = 1;
public Keyval[] Options_lang_list() {if (options_lang_list == null) options_lang_list = Options_list_lang_.new_(); return options_lang_list;} private Keyval[] options_lang_list;
public long Free_mem_when() {return free_mem_when;} long free_mem_when;
@ -42,6 +47,7 @@ public class Xoa_sys_cfg implements Gfo_invk {
else if (ctx.Match(k, Invk_lang_list)) return Options_lang_list();
else if (ctx.Match(k, Invk_options_version)) return options_version;
else if (ctx.Match(k, Invk_options_version_)) options_version = m.ReadInt("v");
else if (ctx.Match(k, Cfg__lang)) Lang_(m.ReadBry("v"));
else return Gfo_invk_.Rv_unhandled;
return this;
}

View File

@ -46,7 +46,6 @@ public class Xoapi_root implements Gfo_invk {
public Xoapi_html Html() {return html_api;} private final Xoapi_html html_api = new Xoapi_html();
public Xoapi_bldr Bldr() {return bldr_api;} private final Xoapi_bldr bldr_api = new Xoapi_bldr();
public Xoapi_usr Usr() {return usr_api;} private final Xoapi_usr usr_api = new Xoapi_usr();
public Xoapi_special Special() {return special_api;} private final Xoapi_special special_api = new Xoapi_special();
public Xoapi_xtns Xtns() {return xtns_api;} private final Xoapi_xtns xtns_api = new Xoapi_xtns();
public Xoapi_app_wikis Wikis() {return app_wikis;} private final Xoapi_app_wikis app_wikis = new Xoapi_app_wikis();
public String Test_str() {return test_str;} public void Test_str_(String v) {test_str = v;} private String test_str; // TEST
@ -63,7 +62,6 @@ public class Xoapi_root implements Gfo_invk {
else if (ctx.Match(k, Invk_gui)) return gui_api;
else if (ctx.Match(k, Invk_html)) return html_api;
else if (ctx.Match(k, Invk_usr)) return usr_api;
else if (ctx.Match(k, Invk_special)) return special_api;
else if (ctx.Match(k, Invk_xtns)) return xtns_api;
else if (ctx.Match(k, Invk_exec)) Exec(m.ReadStr("v"));
else if (ctx.Match(k, Invk_wikis)) return app_wikis;
@ -74,7 +72,7 @@ public class Xoapi_root implements Gfo_invk {
private static final String
Invk_exec = "exec"
, Invk_app = "app", Invk_addon = "addon"
, Invk_bldr = "bldr", Invk_nav = "nav", Invk_gui = "gui", Invk_html = "html", Invk_usr = "usr", Invk_special = "special", Invk_xtns = "xtns"
, Invk_bldr = "bldr", Invk_nav = "nav", Invk_gui = "gui", Invk_html = "html", Invk_usr = "usr", Invk_xtns = "xtns"
, Invk_test_str = "test_str", Invk_test_str_ = "test_str_"
, Invk_wikis = "wikis"
;

View File

@ -21,17 +21,11 @@ public class Xoapi_addon implements Gfo_invk {
public void Ctor_by_app(Xoa_app app) {}
public Xoapi_addon_search Search() {return search;} private final Xoapi_addon_search search = new Xoapi_addon_search();
public Xoapi_addon_bldr Bldr() {return bldr;} private final Xoapi_addon_bldr bldr = new Xoapi_addon_bldr();
public boolean Wikis__ctgs__hidden_enabled() {return wikis__ctgs__hidden_enabled;} private boolean wikis__ctgs__hidden_enabled = false;
public boolean App__scripting__enabled() {return app__scripting__enabled;} private boolean app__scripting__enabled = false;
public String App__update__restart_cmd() {return app__update__restart_cmd;} private String app__update__restart_cmd = "";
public String App__update__update_db_src() {return app__update__update_db_src;} private String app__update__update_db_src = "http://xowa.org";
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk__search)) return search;
else if (ctx.Match(k, Invk__bldr)) return bldr;
else if (ctx.Match(k, Invk__wikis__ctgs__hidden_enabled)) return Yn.To_str(wikis__ctgs__hidden_enabled);
else if (ctx.Match(k, Invk__wikis__ctgs__hidden_enabled_)) wikis__ctgs__hidden_enabled = m.ReadYn("v");
else if (ctx.Match(k, Invk__app__scripting__enabled)) return Yn.To_str(app__scripting__enabled);
else if (ctx.Match(k, Invk__app__scripting__enabled_)) app__scripting__enabled = m.ReadYn("v");
else if (ctx.Match(k, Invk__app__update__restart_cmd)) return app__update__restart_cmd;
else if (ctx.Match(k, Invk__app__update__restart_cmd_)) app__update__restart_cmd = m.ReadStr("v");
else if (ctx.Match(k, Invk__app__update__update_db_src)) return app__update__update_db_src;
@ -40,10 +34,6 @@ public class Xoapi_addon implements Gfo_invk {
return this;
}
private static final String Invk__search = "search", Invk__bldr = "bldr"
, Invk__wikis__ctgs__hidden_enabled = "wikis__ctgs__hidden_enabled"
, Invk__wikis__ctgs__hidden_enabled_ = "wikis__ctgs__hidden_enabled_"
, Invk__app__scripting__enabled = "app__scripting__enabled"
, Invk__app__scripting__enabled_ = "app__scripting__enabled_"
, Invk__app__update__restart_cmd = "app__update__restart_cmd"
, Invk__app__update__restart_cmd_ = "app__update__restart_cmd_"
, Invk__app__update__update_db_src = "app__update__update_db_src"

View File

@ -22,19 +22,14 @@ public class Xoapi_html implements Gfo_invk {
page.Ctor_by_app(app);
}
public void Init_by_kit(Xoae_app app) {
tidy.Init_by_kit(app);
modules.Init_by_kit(app);
}
public Xoapi_tidy Tidy() {return tidy;} private final Xoapi_tidy tidy = new Xoapi_tidy();
public Xoapi_modules Modules() {return modules;} private final Xoapi_modules modules = new Xoapi_modules();
public Xoapi_skins Skins() {return skins;} private final Xoapi_skins skins = new Xoapi_skins();
public Xoapi_page Page() {return page;} private final Xoapi_page page = new Xoapi_page();
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_tidy)) return tidy;
else if (ctx.Match(k, Invk_modules)) return modules;
else if (ctx.Match(k, Invk_skins)) return skins;
if (ctx.Match(k, Invk_modules)) return modules;
else if (ctx.Match(k, Invk_page)) return page;
else return Gfo_invk_.Rv_unhandled;
}
private static final String Invk_tidy = "tidy", Invk_modules = "modules", Invk_skins = "skins", Invk_page = "page";
private static final String Invk_modules = "modules", Invk_page = "page";
}

View File

@ -1,31 +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.apps.apis.xowa; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*;
import gplx.xowa.apps.apis.xowa.specials.*;
public class Xoapi_special implements Gfo_invk {
public void Ctor_by_app(Xoae_app app) {
}
public void Init_by_kit(Xoae_app app) {
}
public Xoapi_search Search() {return search;} private Xoapi_search search = new Xoapi_search();
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_search)) return search;
else return Gfo_invk_.Rv_unhandled;
}
private static final String Invk_search = "search";
}

View File

@ -20,6 +20,7 @@ import gplx.xowa.apps.apis.xowa.xtns.*;
public class Xoapi_xtns implements Gfo_invk {
public void Init_by_kit(Xoae_app app) {
scribunto.Init_by_kit(app);
wikibase.Init_by_app(app);
}
public Xoapi_scribunto Scribunto() {return scribunto;} private final Xoapi_scribunto scribunto = new Xoapi_scribunto();
public Xoapi_wikibase Wikibase() {return wikibase;} private final Xoapi_wikibase wikibase = new Xoapi_wikibase();

View File

@ -19,15 +19,9 @@ package gplx.xowa.apps.apis.xowa.addons; import gplx.*; import gplx.xowa.*; impo
import gplx.xowa.apps.apis.xowa.addons.bldrs.*;
public class Xoapi_addon_bldr implements Gfo_invk {
public Xoapi_central_api Central() {return central;} private final Xoapi_central_api central = new Xoapi_central_api();
public Xoapi_sync_api Sync() {return sync;} private final Xoapi_sync_api sync = new Xoapi_sync_api();
public boolean Wikis__ctgs__hidden_enabled() {return wikis__ctgs__hidden_enabled;} private boolean wikis__ctgs__hidden_enabled = false;
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk__central)) return central;
else if (ctx.Match(k, Invk__sync)) return sync;
else return Gfo_invk_.Rv_unhandled;
}
private static final String
Invk__central = "central"
, Invk__sync = "sync"
;
private static final String Invk__central = "central";
}

View File

@ -19,18 +19,12 @@ package gplx.xowa.apps.apis.xowa.addons; import gplx.*; import gplx.xowa.*; impo
import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.domains.crts.*;
import gplx.xowa.apps.apis.xowa.addons.searchs.*;
public class Xoapi_addon_search implements Gfo_invk {
public Xoapi_addon_search() {}
public Xoapi_url_bar Url_bar() {return url_bar;} private final Xoapi_url_bar url_bar = new Xoapi_url_bar();
@gplx.Internal protected Xoapi_search_box Search_box() {return search_box;} private final Xoapi_search_box search_box = new Xoapi_search_box();
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk__url_bar)) return url_bar;
else if (ctx.Match(k, Invk__search_box)) return search_box;
if (ctx.Match(k, Invk__search_box)) return search_box;
else return Gfo_invk_.Rv_unhandled;
}
private static final String
Invk__url_bar = "url_bar"
, Invk__search_box = "search_box"
;
private static final String Invk__search_box = "search_box";
}
class Xoapi_search_box implements Gfo_invk {
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {

View File

@ -1,51 +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.apps.apis.xowa.addons.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*; import gplx.xowa.apps.apis.xowa.addons.*;
public class Xoapi_sync_api implements Gfo_invk {
private final Xopg_match_mgr auto_page_matcher = new Xopg_match_mgr();
public Xoapi_sync_api() {
this.Auto_scope_("*:Main_Page");
}
public boolean Manual_enabled() {return manual_enabled;} private boolean manual_enabled = false;
public boolean Auto_enabled() {return auto_enabled;} private boolean auto_enabled = false;
public int Auto_interval() {return auto_interval;} private int auto_interval = 60 * 24; // in minutes
public String Auto_scope() {return auto_scope;} private String auto_scope;
private void Auto_scope_(String v) {
this.auto_scope = v;
auto_page_matcher.Set(v);
}
public Xopg_match_mgr Auto_page_matcher() {return auto_page_matcher;}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk__manual_enabled)) return Yn.To_str(manual_enabled);
else if (ctx.Match(k, Invk__manual_enabled_)) manual_enabled = m.ReadBool("v");
else if (ctx.Match(k, Invk__auto_enabled)) return Yn.To_str(auto_enabled);
else if (ctx.Match(k, Invk__auto_enabled_)) auto_enabled = m.ReadBool("v");
else if (ctx.Match(k, Invk__auto_interval)) return Int_.To_str(auto_interval);
else if (ctx.Match(k, Invk__auto_interval_)) auto_interval = m.ReadInt("v");
else if (ctx.Match(k, Invk__auto_scope)) return auto_scope;
else if (ctx.Match(k, Invk__auto_scope_)) Auto_scope_(m.ReadStr("v"));
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String
Invk__manual_enabled = "manual_enabled" , Invk__manual_enabled_ = "manual_enabled_"
, Invk__auto_enabled = "auto_enabled" , Invk__auto_enabled_ = "auto_enabled_"
, Invk__auto_interval = "auto_interval" , Invk__auto_interval_ = "auto_interval_"
, Invk__auto_scope = "auto_scope" , Invk__auto_scope_ = "auto_scope_"
;
}

View File

@ -1,78 +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.apps.apis.xowa.addons.searchs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*; import gplx.xowa.apps.apis.xowa.addons.*;
import gplx.xowa.addons.wikis.searchs.searchers.*; import gplx.xowa.addons.wikis.searchs.searchers.crts.*;
public class Xoapi_url_bar implements Gfo_invk, Gfo_evt_mgr_owner {
public Xoapi_url_bar() {
this.evt_mgr = new Gfo_evt_mgr(this);
}
public Gfo_evt_mgr Evt_mgr() {return evt_mgr;} private final Gfo_evt_mgr evt_mgr;
public boolean Enabled() {return enabled;} private boolean enabled = true;
public int Search_mode() {return search_mode;} private int search_mode = Xoapi_search_mode_.Tid__title_word;
public int Max_results() {return max_results;} private int max_results = 10;
public boolean Auto_wildcard() {return auto_wildcard;} private boolean auto_wildcard = true;
public Srch_ns_mgr Ns_mgr() {return ns_mgr;} private final Srch_ns_mgr ns_mgr = new Srch_ns_mgr().Add_main_if_empty();
public Srch_crt_scanner_syms Syms() {return syms;} private Srch_crt_scanner_syms syms = Srch_search_mgr.Scanner_syms;
public Keyval[] Operators() {return symbols;} private Keyval[] symbols = Keyval_.Ary_empty;
public int Visible_rows() {return visible_rows;} private int visible_rows = 10;
public int Jump_len() {return jump_len;} private int jump_len = 5;
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);
Gfo_evt_mgr_.Pub(this, Evt__ns_ids_changed);
}
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.ReadBool("v");
else if (ctx.Match(k, Invk__search_mode)) return Xoapi_search_mode_.To_str(search_mode);
else if (ctx.Match(k, Invk__search_mode_)) search_mode = Xoapi_search_mode_.To_int(m.ReadStr("v"));
else if (ctx.Match(k, Invk__max_results)) return Int_.To_str(max_results);
else if (ctx.Match(k, Invk__max_results_)) max_results = 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.ReadBool("v");
else if (ctx.Match(k, Invk__ns_ids)) return Int_.To_str(ns_mgr.To_int_ary(), "|");
else if (ctx.Match(k, Invk__ns_ids_)) Ns_ids_(m.ReadStr("v"));
else if (ctx.Match(k, Invk__symbols)) return String_.new_u8(syms.To_bry());
else if (ctx.Match(k, Invk__symbols_)) syms.Parse(m.ReadBry("v"));
else if (ctx.Match(k, Invk__visible_rows)) return Int_.To_str(visible_rows);
else if (ctx.Match(k, Invk__visible_rows_)) {visible_rows = m.ReadInt("v"); Gfo_evt_mgr_.Pub_val(this, Evt__visible_rows_changed, visible_rows);}
else if (ctx.Match(k, Invk__jump_len)) return Int_.To_str(jump_len);
else if (ctx.Match(k, Invk__jump_len_)) {jump_len = m.ReadInt("v"); Gfo_evt_mgr_.Pub_val(this, Evt__jump_len_changed, jump_len);}
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String
Invk__enabled = "enabled" , Invk__enabled_ = "enabled_"
, Invk__search_mode = "search_mode" , Invk__search_mode_ = "search_mode_"
, Invk__max_results = "max_results" , Invk__max_results_ = "max_results_"
, Invk__auto_wildcard = "auto_wildcard" , Invk__auto_wildcard_ = "auto_wildcard_"
, Invk__ns_ids = "ns_ids" , Invk__ns_ids_ = "ns_ids_"
, Invk__symbols = "symbols" , Invk__symbols_ = "symbols_"
, Invk__visible_rows = "visible_rows" , Invk__visible_rows_ = "visible_rows_"
, Invk__jump_len = "jump_len" , Invk__jump_len_ = "jump_len_"
;
public static final String
Evt__visible_rows_changed = "visible_rows_changed"
, Evt__jump_len_changed = "jump_len_changed"
, Evt__ns_ids_changed = "ns_ids_changed"
;
}

View File

@ -17,92 +17,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.apps.apis.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*; import gplx.xowa.apps.apis.xowa.bldrs.*;
import gplx.core.ios.*; import gplx.core.ios.streams.*;
import gplx.xowa.wikis.data.*; import gplx.xowa.apps.apis.xowa.bldrs.imports.page_ranks.*;
import gplx.xowa.wikis.data.*;
public class Xoapi_import implements Gfo_invk {
public Xoapi_page_rank Page_rank() {return page_rank;} private final Xoapi_page_rank page_rank = new Xoapi_page_rank();
public long Layout_all_max() {return layout_all_max;} private long layout_all_max = 0; // disable by default; may set to 200 MB in future
public long Layout_text_max() {return layout_text_max;} private long layout_text_max = Io_size_.To_long_by_int_mb(1500); // 1.0 GB
public long Layout_html_max() {return layout_html_max;} private long layout_html_max = Io_size_.To_long_by_int_mb(1500); // 1.0 GB
public long Layout_file_max() {return layout_file_max;} private long layout_file_max = Io_size_.To_long_by_int_mb(1500); // 1.0 GB
public long Cat_link_db_max() {return cat_link_db_max;} private long cat_link_db_max = Io_size_.To_long_by_int_mb(1500); // 3.6 GB; v1
public long Text_db_max() {return text_db_max;} private long text_db_max = Io_size_.To_long_by_int_mb(1500); // 3.0 GB; v1
public long Html_db_max() {return html_db_max;} private long html_db_max = Io_size_.To_long_by_int_mb(1500); // 3.0 GB; v2; use same as text
public long File_db_max() {return file_db_max;} private long file_db_max = Io_size_.To_long_by_int_mb(1500); // 3.2 GB; v2
public byte[] Ns_file_map() {return ns_file_map;} private byte[] ns_file_map = Ns_file_map__each;
public byte Zip_tid_text() {return zip_tid_text;} private byte zip_tid_text = Io_stream_tid_.Tid__gzip;
public byte Zip_tid_html() {return zip_tid_html;} private byte zip_tid_html = Io_stream_tid_.Tid__gzip;
public boolean Hzip_enabled() {return hzip_enabled;} private boolean hzip_enabled = Bool_.Y;
public boolean Hzip_mode_is_b256() {return hzip_mode_is_b256;} private boolean hzip_mode_is_b256 = Bool_.Y;
public String User_name() {return user_name;} private String user_name = "anonymous";
public Xowd_core_db_props New_props(String domain_str, long dump_file_size) {
Xow_db_layout layout_text, layout_html, layout_file;
if (dump_file_size < layout_all_max)
layout_text = layout_html = layout_file = Xow_db_layout.Itm_all;
else {
layout_text = dump_file_size < layout_text_max ? Xow_db_layout.Itm_few : Xow_db_layout.Itm_lot;
layout_html = dump_file_size < layout_html_max ? Xow_db_layout.Itm_few : Xow_db_layout.Itm_lot;
layout_file = dump_file_size < layout_file_max ? Xow_db_layout.Itm_few : Xow_db_layout.Itm_lot;
}
return new Xowd_core_db_props(2, layout_text, layout_html, layout_file, zip_tid_text, zip_tid_html, hzip_enabled, hzip_mode_is_b256);
}
public byte[] New_ns_file_map(long dump_file_size) {
return dump_file_size < layout_text_max
? gplx.xowa.bldrs.cmds.Xob_ns_file_itm_parser.Ns_file_map__few
: gplx.xowa.bldrs.cmds.Xob_ns_file_itm_parser.Ns_file_map__each; // DB.FEW: DATE:2016-06-07
// return dump_file_size < layout_text_max ? Bry_.Empty : Ns_file_map__each;
}
public void Zip_tid_text_raw_() {zip_tid_text = Io_stream_tid_.Tid__raw;} // TEST:
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_layout_all_max)) return Io_size_.To_str_mb(layout_all_max);
else if (ctx.Match(k, Invk_layout_all_max_)) layout_all_max = Io_size_.To_long_by_msg_mb(m, layout_all_max);
else if (ctx.Match(k, Invk_layout_text_max)) return Io_size_.To_str_mb(layout_text_max);
else if (ctx.Match(k, Invk_layout_text_max_)) layout_text_max = Io_size_.To_long_by_msg_mb(m, layout_text_max);
else if (ctx.Match(k, Invk_layout_html_max)) return Io_size_.To_str_mb(layout_html_max);
else if (ctx.Match(k, Invk_layout_html_max_)) layout_html_max = Io_size_.To_long_by_msg_mb(m, layout_html_max);
else if (ctx.Match(k, Invk_layout_file_max)) return Io_size_.To_str_mb(layout_file_max);
else if (ctx.Match(k, Invk_layout_file_max_)) layout_file_max = Io_size_.To_long_by_msg_mb(m, layout_file_max);
else if (ctx.Match(k, Invk_cat_link_db_max)) return Io_size_.To_str_mb(cat_link_db_max);
if (ctx.Match(k, Invk_cat_link_db_max)) return Io_size_.To_str_mb(cat_link_db_max);
else if (ctx.Match(k, Invk_cat_link_db_max_)) cat_link_db_max = Io_size_.To_long_by_msg_mb(m, cat_link_db_max);
else if (ctx.Match(k, Invk_text_db_max)) return Io_size_.To_str_mb(text_db_max);
else if (ctx.Match(k, Invk_text_db_max_)) text_db_max = Io_size_.To_long_by_msg_mb(m, text_db_max);
else if (ctx.Match(k, Invk_html_db_max)) return Io_size_.To_str_mb(html_db_max);
else if (ctx.Match(k, Invk_html_db_max_)) html_db_max = Io_size_.To_long_by_msg_mb(m, html_db_max);
else if (ctx.Match(k, Invk_file_db_max)) return Io_size_.To_str_mb(file_db_max);
else if (ctx.Match(k, Invk_file_db_max_)) file_db_max = Io_size_.To_long_by_msg_mb(m, file_db_max);
else if (ctx.Match(k, Invk_ns_file_map)) return String_.new_u8(ns_file_map);
else if (ctx.Match(k, Invk_ns_file_map_)) ns_file_map = m.ReadBry("v");
else if (ctx.Match(k, Invk_zip_tid_text)) return Io_stream_tid_.To_key(zip_tid_text);
else if (ctx.Match(k, Invk_zip_tid_text_)) zip_tid_text = Io_stream_tid_.To_tid(m.ReadStr("v"));
else if (ctx.Match(k, Invk_zip_tid_list)) return Options_zip_tid__list;
else if (ctx.Match(k, Invk_zip_tid_html)) return Io_stream_tid_.To_key(zip_tid_html);
else if (ctx.Match(k, Invk_zip_tid_html_)) zip_tid_html = Io_stream_tid_.To_tid(m.ReadStr("v"));
else if (ctx.Match(k, Invk_hzip_enabled)) return Yn.To_str(hzip_enabled);
else if (ctx.Match(k, Invk_hzip_enabled_)) hzip_enabled = m.ReadYn("v");
else if (ctx.Match(k, Invk_hzip_mode_is_b256)) return Yn.To_str(hzip_mode_is_b256);
else if (ctx.Match(k, Invk_hzip_mode_is_b256_)) hzip_mode_is_b256 = m.ReadYn("v");
else if (ctx.Match(k, Invk_user_name)) return user_name;
else if (ctx.Match(k, Invk_user_name_)) user_name = m.ReadStr("v");
else if (ctx.Match(k, Invk_page_rank)) return page_rank;
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final Keyval[] Options_zip_tid__list = Keyval_.Ary(Keyval_.new_("raw", "text"), Keyval_.new_("gzip"), Keyval_.new_("bzip2"), Keyval_.new_("xz"));
private static final String
Invk_layout_all_max = "layout_all_max" , Invk_layout_all_max_ = "layout_all_max_"
, Invk_layout_text_max = "layout_text_max" , Invk_layout_text_max_ = "layout_text_max_"
, Invk_layout_html_max = "layout_html_max" , Invk_layout_html_max_ = "layout_html_max_"
, Invk_layout_file_max = "layout_file_max" , Invk_layout_file_max_ = "layout_file_max_"
, Invk_cat_link_db_max = "cat_link_db_max" , Invk_cat_link_db_max_ = "cat_link_db_max_"
, Invk_text_db_max = "text_db_max" , Invk_text_db_max_ = "text_db_max_"
, Invk_html_db_max = "html_db_max" , Invk_html_db_max_ = "html_db_max_"
, Invk_file_db_max = "file_db_max" , Invk_file_db_max_ = "file_db_max_"
, Invk_ns_file_map = "ns_file_map" , Invk_ns_file_map_ = "ns_file_map_"
, Invk_zip_tid_text = "zip_tid_text" , Invk_zip_tid_text_ = "zip_tid_text_", Invk_zip_tid_list = "zip_tid_list"
, Invk_zip_tid_html = "zip_tid_html" , Invk_zip_tid_html_ = "zip_tid_html_"
Invk_cat_link_db_max = "cat_link_db_max" , Invk_cat_link_db_max_ = "cat_link_db_max_"
, Invk_user_name = "user_name" , Invk_user_name_ = "user_name_"
, Invk_hzip_enabled = "hzip_enabled" , Invk_hzip_enabled_ = "hzip_enabled_"
, Invk_hzip_mode_is_b256 = "hzip_mode_is_b256" , Invk_hzip_mode_is_b256_ = "hzip_mode_is_b256_"
, Invk_page_rank = "page_rank"
;
public static final byte[] Ns_file_map__each = Bry_.new_a7("<each>");
}

View File

@ -1,30 +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.apps.apis.xowa.bldrs.imports.page_ranks; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*; import gplx.xowa.apps.apis.xowa.bldrs.*; import gplx.xowa.apps.apis.xowa.bldrs.imports.*;
public class Xoapi_page_rank implements Gfo_invk {
public int Iteration_max() {return iteration_max;} private int iteration_max = 0;
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_iteration_max)) return Int_.To_str(iteration_max);
else if (ctx.Match(k, Invk_iteration_max_)) iteration_max = m.ReadInt("v");
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String
Invk_iteration_max = "iteration_max" , Invk_iteration_max_ = "iteration_max_"
;
}

View File

@ -20,27 +20,27 @@ import gplx.xowa.apps.apis.xowa.gui.browsers.*;
public class Xoapi_browser implements Gfo_invk {
public void Init_by_kit(Xoae_app app) {
url.Init_by_kit(app);
search.Init_by_kit(app);
tabs.Init_by_kit(app);
html.Init_by_kit(app);
search.Init_by_kit(app);
find.Init_by_kit(app);
prog.Init_by_kit(app);
info.Init_by_kit(app);
prog_log.Init_by_kit(app);
}
public Xoapi_url Url() {return url;} private Xoapi_url url = new Xoapi_url();
public Xoapi_search Search() {return search;} private Xoapi_search search = new Xoapi_search();
public Xoapi_tabs Tabs() {return tabs;} private Xoapi_tabs tabs = new Xoapi_tabs();
public Xoapi_html_box Html() {return html;} private Xoapi_html_box html = new Xoapi_html_box();
public Xoapi_search Search() {return search;} private Xoapi_search search = new Xoapi_search();
public Xoapi_find Find() {return find;} private Xoapi_find find = new Xoapi_find();
public Xoapi_prog Prog() {return prog;} private Xoapi_prog prog = new Xoapi_prog();
public Xoapi_info Info() {return info;} private Xoapi_info info = new Xoapi_info();
public Xoapi_prog_log Prog_log() {return prog_log;} private Xoapi_prog_log prog_log = new Xoapi_prog_log();
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_url)) return url;
else if (ctx.Match(k, Invk_search)) return search;
else if (ctx.Match(k, Invk_tabs)) return tabs;
else if (ctx.Match(k, Invk_html)) return html;
else if (ctx.Match(k, Invk_search)) return search;
else if (ctx.Match(k, Invk_find)) return find;
else if (ctx.Match(k, Invk_prog)) return prog;
else if (ctx.Match(k, Invk_info)) return info;
@ -48,6 +48,6 @@ public class Xoapi_browser implements Gfo_invk {
else return Gfo_invk_.Rv_unhandled;
}
private static final String
Invk_url = "url", Invk_search = "search", Invk_tabs = "tabs", Invk_html = "html"
Invk_url = "url", Invk_tabs = "tabs", Invk_html = "html", Invk_search = "search"
, Invk_find = "find", Invk_prog = "prog", Invk_info = "info", Invk_prog_log = "prog_log";
}

View File

@ -20,10 +20,8 @@ import gplx.gfui.*; import gplx.gfui.envs.*; import gplx.gfui.controls.standards
import gplx.xowa.guis.views.*; import gplx.core.envs.*;
public class Xoapi_url implements Gfo_invk {
private Xoae_app app;
private Xoapi_url_searcher url_searcher;
public void Init_by_kit(Xoae_app app) {
this.app = app;
this.url_searcher = new Xoapi_url_searcher(app);
}
private GfuiComboBox Url_box() {return app.Gui_mgr().Browser_win().Url_box();}
public void Focus() {this.Url_box().Focus(); this.Url_box().Sel_(0, String_.Len(this.Url_box().Text()));}
@ -34,8 +32,8 @@ public class Xoapi_url implements Gfo_invk {
Xog_tab_itm tab = app.Gui_mgr().Browser_win().Active_tab(); if (tab == Xog_tab_itm_.Null) return;
this.Url_box().Text_(tab.Page().Url().To_str());
}
public void Type() {
url_searcher.Search();
void Type() {
app.Addon_mgr().Itms__search__urlbar().Search();
}
private void Exec_wkr(boolean new_tab, String urls_text) {
if (Op_sys.Cur().Tid_is_wnt())

View File

@ -1,74 +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.apps.apis.xowa.gui.browsers; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*; import gplx.xowa.apps.apis.xowa.gui.*;
import gplx.gfui.*; import gplx.gfui.controls.standards.*;
import gplx.xowa.addons.wikis.searchs.*; import gplx.xowa.addons.wikis.searchs.searchers.*; import gplx.xowa.addons.wikis.searchs.searchers.cbks.*;
import gplx.xowa.apps.apis.xowa.addons.searchs.*;
import gplx.xowa.guis.views.*;
class Xoapi_url_searcher implements Gfo_evt_itm {
private final Xoae_app app;
private final Xoapi_url_bar url_bar_api; private Srch_search_addon addon;
private final GfuiComboBox url_bar;
public Xoapi_url_searcher(Xoae_app app) { // called by Init_by_kit
this.app = app;
this.evt_mgr = new Gfo_evt_mgr(this);
this.url_bar = app.Gui_mgr().Browser_win().Url_box();
this.url_bar_api = app.Api_root().Addon().Search().Url_bar();
Gfo_evt_mgr_.Sub_same_many(url_bar_api, this, Xoapi_url_bar.Evt__jump_len_changed, Xoapi_url_bar.Evt__visible_rows_changed, Xoapi_url_bar.Evt__ns_ids_changed);
url_bar.Items__jump_len_(url_bar_api.Jump_len());
url_bar.Items__visible_rows_(url_bar_api.Visible_rows());
}
public Gfo_evt_mgr Evt_mgr() {return evt_mgr;} private final Gfo_evt_mgr evt_mgr;
public void Search() {
if (!url_bar_api.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(url_bar_api.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, url_bar_api, Bry_.new_u8(search_str));
Srch_rslt_cbk__url_bar cbk = new Srch_rslt_cbk__url_bar(app, url_bar, url_bar_api);
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, Xoapi_url_bar.Evt__jump_len_changed)) {url_bar.Items__jump_len_(m.ReadInt("v"));}
else if (ctx.Match(k, Xoapi_url_bar.Evt__visible_rows_changed)) {url_bar.Items__visible_rows_(m.ReadInt("v"));}
else if (ctx.Match(k, Xoapi_url_bar.Evt__ns_ids_changed)) {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
return this;
}
}

View File

@ -21,16 +21,10 @@ public class Xoapi_modules implements Gfo_invk {
public void Init_by_kit(Xoae_app app) {
popups.Init_by_app(app);
}
public Xoapi_collapsible Collapsible() {return collapsible;} private Xoapi_collapsible collapsible = new Xoapi_collapsible();
public Xoapi_navframe Navframe() {return navframe;} private Xoapi_navframe navframe = new Xoapi_navframe();
public Xoapi_toc Toc() {return toc;} private Xoapi_toc toc = new Xoapi_toc();
public Xoapi_popups Popups() {return popups;} private Xoapi_popups popups = new Xoapi_popups();
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_collapsible)) return collapsible;
else if (ctx.Match(k, Invk_navframe)) return navframe;
else if (ctx.Match(k, Invk_toc)) return toc;
else if (ctx.Match(k, Invk_popups)) return popups;
if (ctx.Match(k, Invk_popups)) return popups;
else return Gfo_invk_.Rv_unhandled;
}
private static final String Invk_collapsible = "collapsible", Invk_navframe = "navframe", Invk_toc = "toc", Invk_popups = "popups";
private static final String Invk_popups = "popups";
}

View File

@ -1,35 +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.apps.apis.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*;
import gplx.xowa.apps.apis.xowa.html.skins.*;
public class Xoapi_skins implements Gfo_invk {
private Hash_adp hash = Hash_adp_.New();
public Xoapi_skins() {
server.Sidebar_home_enabled_(true);
hash.Add("desktop", desktop);
hash.Add("server", server);
}
public Xoapi_skin_app_base Desktop() {return desktop;} private Xoapi_skin_app_base desktop = new Xoapi_skin_app_base();
public Xoapi_skin_app_base Server () {return server ;} private Xoapi_skin_app_base server = new Xoapi_skin_app_base();
private Gfo_invk Get(String key) {return (Gfo_invk)hash.Get_by(key);}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_get)) return Get(m.ReadStr("v"));
return this;
}
private static final String Invk_get = "get";
}

View File

@ -1,40 +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.apps.apis.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*;
import gplx.xowa.htmls.core.htmls.tidy.*;
public class Xoapi_tidy implements Gfo_invk {
private Xoae_app app;
public void Init_by_kit(Xoae_app app) {
this.app = app;
}
public void Toggle() {
app.Html_mgr().Tidy_mgr().Enabled_toggle();
app.Gui_mgr().Browser_win().Page__refresh();
}
public void Engine_(byte v) {
app.Html_mgr().Tidy_mgr().Wkr_tid_(v);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_toggle)) this.Toggle();
else if (ctx.Match(k, Invk_engine_tidy_)) Engine_(Xoh_tidy_wkr_.Tid_tidy);
else if (ctx.Match(k, Invk_engine_jtidy_)) Engine_(Xoh_tidy_wkr_.Tid_jtidy);
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String Invk_toggle = "toggle", Invk_engine_tidy_ = "engine_tidy_", Invk_engine_jtidy_ = "engine_jtidy_";
}

View File

@ -1,32 +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.apps.apis.xowa.html.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*; import gplx.xowa.apps.apis.xowa.html.*;
public class Xoapi_collapsible implements Gfo_invk {
public void Init_by_kit(Xoae_app app) {
}
public boolean Collapsed() {return collapsed;} private boolean collapsed;
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_collapsed)) return Yn.To_str(collapsed);
else if (ctx.Match(k, Invk_collapsed_)) collapsed = m.ReadYn("v");
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String
Invk_collapsed = "collapsed", Invk_collapsed_ = "collapsed_"
;
}

View File

@ -1,32 +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.apps.apis.xowa.html.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*; import gplx.xowa.apps.apis.xowa.html.*;
public class Xoapi_navframe implements Gfo_invk {
public void Init_by_kit(Xoae_app app) {
}
public boolean Collapsed() {return collapsed;} private boolean collapsed;
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_collapsed)) return Yn.To_str(collapsed);
else if (ctx.Match(k, Invk_collapsed_)) collapsed = m.ReadYn("v");
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String
Invk_collapsed = "collapsed", Invk_collapsed_ = "collapsed_"
;
}

View File

@ -1,32 +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.apps.apis.xowa.html.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*; import gplx.xowa.apps.apis.xowa.html.*;
public class Xoapi_toc implements Gfo_invk {
public void Init_by_kit(Xoae_app app) {
}
public boolean Collapsed() {return collapsed;} private boolean collapsed = false;
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_collapsed)) return Yn.To_str(collapsed);
else if (ctx.Match(k, Invk_collapsed_)) collapsed = m.ReadYn("v");
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String
Invk_collapsed = "collapsed", Invk_collapsed_ = "collapsed_"
;
}

View File

@ -1,29 +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.apps.apis.xowa.html.skins; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*; import gplx.xowa.apps.apis.xowa.html.*;
public class Xoapi_skin_app_base implements Gfo_invk {
public void Init_by_kit(Xoae_app app) {
}
public boolean Sidebar_home_enabled() {return sidebar_home_enabled;} public void Sidebar_home_enabled_(boolean v) {sidebar_home_enabled = v;} private boolean sidebar_home_enabled;
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_sidebar_home_enabled)) return Yn.To_str(sidebar_home_enabled);
else if (ctx.Match(k, Invk_sidebar_home_enabled_)) sidebar_home_enabled = m.ReadYn("v");
return this;
}
private static final String Invk_sidebar_home_enabled = "sidebar_home_enabled", Invk_sidebar_home_enabled_ = "sidebar_home_enabled_";
}

View File

@ -1,73 +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.apps.apis.xowa.specials; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*;
import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.domains.crts.*;
public class Xoapi_search implements Gfo_invk, Gfo_evt_mgr_owner {
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;
public Xoapi_search() {
this.evt_mgr = new Gfo_evt_mgr(this);
multi_wikis_mgr.Parse_as_itms(multi_wikis_bry);
multi_sorts_mgr.Parse_as_arys(multi_sorts_bry);
}
public Gfo_evt_mgr Evt_mgr() {return evt_mgr;} private Gfo_evt_mgr evt_mgr;
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 void Multi_wikis_bry_(byte[] v) {
if (!multi_wikis_mgr.Parse_as_itms(v)) return;
this.multi_wikis_bry = v;
Gfo_evt_mgr_.Pub_val(this, Evt_multi_wikis_changed, v);
}
public Xow_domain_crt_itm Multi_wikis_crt(Xow_domain_itm cur_domain) {
return multi_wikis_mgr.Find_itm(cur_domain, cur_domain);
}
public void Multi_sorts_bry_(byte[] v) {
if (!multi_sorts_mgr.Parse_as_arys(v)) return;
this.multi_sorts_bry = v;
Gfo_evt_mgr_.Pub_val(this, Evt_multi_sorts_changed, v);
}
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, Invk_results_per_page)) return results_per_page;
else if (ctx.Match(k, Invk_results_per_page_)) results_per_page = m.ReadInt("v");
else if (ctx.Match(k, Invk_async_db)) return Yn.To_str(async_db);
else if (ctx.Match(k, Invk_async_db_)) async_db = m.ReadYn("v");
else if (ctx.Match(k, Invk_multi_wikis)) return String_.new_u8(multi_wikis_bry);
else if (ctx.Match(k, Invk_multi_wikis_)) Multi_wikis_bry_(m.ReadBry("v"));
else if (ctx.Match(k, Invk_multi_sorts)) return String_.new_u8(multi_sorts_bry);
else if (ctx.Match(k, Invk_multi_sorts_)) Multi_sorts_bry_(m.ReadBry("v"));
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String
Invk_results_per_page = "results_per_page" , Invk_results_per_page_ = "results_per_page_"
, Invk_async_db = "async_db" , Invk_async_db_ = "async_db_"
, Invk_multi_wikis = "multi_wikis" , Invk_multi_wikis_ = "multi_wikis_"
, Invk_multi_sorts = "multi_sorts" , Invk_multi_sorts_ = "multi_sorts_"
;
public static final String
Evt_multi_wikis_changed = "multi_wikis_changed"
, Evt_multi_sorts_changed = "multi_sorts_changed"
;
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")
;
}

View File

@ -32,20 +32,14 @@ public class Xoapi_cache implements Gfo_invk {
return bfr.To_str_and_clear();
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_fsys_size_min)) return cache_mgr.Fsys_size_min() / Io_mgr.Len_mb;
else if (ctx.Match(k, Invk_fsys_size_min_)) cache_mgr.Fsys_size_min_(Io_size_.To_long_by_msg_mb(m, cache_mgr.Fsys_size_min()));
else if (ctx.Match(k, Invk_fsys_size_max)) return cache_mgr.Fsys_size_max() / Io_mgr.Len_mb;
else if (ctx.Match(k, Invk_fsys_size_max_)) cache_mgr.Fsys_size_max_(Io_size_.To_long_by_msg_mb(m, cache_mgr.Fsys_size_max()));
else if (ctx.Match(k, Invk_info)) return Info();
if (ctx.Match(k, Invk_info)) return Info();
else if (ctx.Match(k, Invk_reduce_to_min)) cache_mgr.Reduce(cache_mgr.Fsys_size_min());
else if (ctx.Match(k, Invk_reduce_to_zero)) cache_mgr.Reduce(0);
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String
Invk_fsys_size_min = "fsys_size_min" , Invk_fsys_size_min_ = "fsys_size_min_"
, Invk_fsys_size_max = "fsys_size_max" , Invk_fsys_size_max_ = "fsys_size_max_"
, Invk_info = "info"
Invk_info = "info"
, Invk_reduce_to_min = "reduce_to_min" , Invk_reduce_to_zero = "reduce_to_zero"
;
}

View File

@ -25,24 +25,24 @@ public class Xoapi_wikibase implements Gfo_invk, Gfo_evt_mgr_owner {
public byte[][] Core_langs() {return core_langs;} private byte[][] core_langs = Bry_.Ary("en");
public byte[][] Sort_langs() {return sort_langs;} private byte[][] sort_langs = Bry_.Ary("en", "de", "es", "fr", "it", "nl", "pl", "ru", "sv");
public byte[] Link_wikis() {return link_wikis;} private byte[] link_wikis = Bry_.new_a7("enwiki");
public void Init_by_app(Xoae_app app) {
app.Cfg().Bind_many_app(this, Cfg__core_langs, Cfg__link_wikis, Cfg__sort_langs);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_core_langs)) return Bry_.Add_w_dlm(Byte_ascii.Semic, core_langs);
else if (ctx.Match(k, Invk_core_langs_)) {core_langs = m.ReadBryAry(k, Byte_ascii.Semic); Gfo_evt_mgr_.Pub_val(this, Evt_core_langs_changed, core_langs);}
else if (ctx.Match(k, Invk_sort_langs)) return Bry_.Add_w_dlm(Byte_ascii.Semic, sort_langs);
else if (ctx.Match(k, Invk_sort_langs_)) {sort_langs = m.ReadBryAry(k, Byte_ascii.Semic); Gfo_evt_mgr_.Pub_val(this, Evt_sort_langs_changed, sort_langs);}
else if (ctx.Match(k, Invk_link_wikis)) return String_.new_u8(link_wikis);
else if (ctx.Match(k, Invk_link_wikis_)) {link_wikis = m.ReadBry(k); Gfo_evt_mgr_.Pub_val(this, Evt_link_wikis_changed, link_wikis);}
if (ctx.Match(k, Cfg__core_langs)) {core_langs = m.ReadBryAry(k, Byte_ascii.Semic); Gfo_evt_mgr_.Pub_val(this, Evt_core_langs_changed, core_langs);}
else if (ctx.Match(k, Cfg__sort_langs)) {sort_langs = m.ReadBryAry(k, Byte_ascii.Semic); Gfo_evt_mgr_.Pub_val(this, Evt_sort_langs_changed, sort_langs);}
else if (ctx.Match(k, Cfg__link_wikis)) {link_wikis = m.ReadBry(k); Gfo_evt_mgr_.Pub_val(this, Evt_link_wikis_changed, link_wikis);}
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String
Invk_core_langs = "core_langs", Invk_core_langs_ = "core_langs_"
, Invk_sort_langs = "sort_langs", Invk_sort_langs_ = "sort_langs_"
, Invk_link_wikis = "link_wikis", Invk_link_wikis_ = "link_wikis_"
;
public static final String
Evt_core_langs_changed = "core_langs_changed"
, Evt_link_wikis_changed = "link_wikis_changed"
, Evt_sort_langs_changed = "sort_langs_changed"
;
private static final String
Cfg__core_langs = "xowa.addon.wikibase.pages.core_langs"
, Cfg__link_wikis = "xowa.addon.wikibase.pages.link_wikis"
, Cfg__sort_langs = "xowa.addon.wikibase.pages.sort_langs"
;
}

View File

@ -37,14 +37,19 @@ public class Xoa_prog_mgr implements Gfo_invk {
Process_adp.ini_(this, usr_dlg, app_lilypond , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}lilypond\\usr\\bin\\lilypond.exe", "\"-dsafe=#t\" -dbackend=ps --png --header=texidoc -dmidi-extension=midi \"~{file}\"", "file");
Process_adp.ini_(this, usr_dlg, app_abc2ly , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}lilypond\\usr\\bin\\python.exe", "abc2ly.py -s \"--output=~{target}\" \"~{source}\"", "source", "target");
Process_adp.ini_(this, usr_dlg, app_trim_img , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}imagemagick\\convert", "-trim \"~{source}\" \"~{target}\"", "source", "target");
Process_adp.ini_(this, usr_dlg, app_convert_midi_to_ogg , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}timidity\\timidity", "-Ov \"--output-file=~{target}\" \"~{source}\"", "source", "target");
Process_adp.ini_(this, usr_dlg, app_midi_to_ogg , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}timidity\\timidity", "-Ov \"--output-file=~{target}\" \"~{source}\"", "source", "target");
Process_adp.ini_(this, usr_dlg, app_view_text , cmd_eval, Process_adp.Run_mode_async , 0 , "cmd", "/c start \"~{url}\"", "url");
for (int i = 0; i < apps_by_ext.length; i++) {
apps_by_ext[i] = Process_adp.New(usr_dlg, cmd_eval, Process_adp.Run_mode_async, 0, "cmd", "/c start \"\" \"~{file}\"", "file");
}
app_web = Process_adp.New(usr_dlg, cmd_eval, Process_adp.Run_mode_async, 0, "cmd", "/c start \"\" \"~{url}\"", "url");
app.Cfg().Bind_many_app(this, Cfg__web, Cfg__media, Cfg__image, Cfg__svg, Cfg__pdf, Cfg__djvu);
app.Cfg().Bind_many_app(this
, Cfg__web, Cfg__media, Cfg__image, Cfg__svg, Cfg__pdf, Cfg__djvu
, Cfg__gz, Cfg__bz2, Cfg__bz2__stdout_cmd
, Cfg__lua
, Cfg__lilypond, Cfg__abc2ly, Cfg__trim_img, Cfg__midi_to_ogg
);
}
private Process_adp App_by_ext_key(String ext) {return apps_by_ext[Xof_ext_.Get_id_by_ext_(Bry_.new_a7(ext))];}
public Process_adp App_query_img_size() {return app_query_img_size;} private Process_adp app_query_img_size = new Process_adp();
@ -62,25 +67,11 @@ public class Xoa_prog_mgr implements Gfo_invk {
public Process_adp App_lilypond() {return app_lilypond;} private Process_adp app_lilypond = new Process_adp();
public Process_adp App_abc2ly() {return app_abc2ly;} private Process_adp app_abc2ly = new Process_adp();
public Process_adp App_trim_img() {return app_trim_img;} private Process_adp app_trim_img = new Process_adp();
public Process_adp App_convert_midi_to_ogg() {return app_convert_midi_to_ogg;} private Process_adp app_convert_midi_to_ogg = new Process_adp();
public Process_adp App_convert_midi_to_ogg() {return app_midi_to_ogg;} private Process_adp app_midi_to_ogg = new Process_adp();
public Process_adp App_by_ext(String ext) {return App_by_ext_key(String_.Mid(ext, 1));} // ignore 1st . in ext; EX: ".png" -> "png"
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_query_img_size)) return app_query_img_size;
else if (ctx.Match(k, Invk_resize_img)) return app_resize_img;
else if (ctx.Match(k, Invk_convert_svg_to_png)) return app_convert_svg_to_png;
else if (ctx.Match(k, Invk_convert_tex_to_dvi)) return app_convert_tex_to_dvi;
if (ctx.Match(k, Invk_convert_tex_to_dvi)) return app_convert_tex_to_dvi;
else if (ctx.Match(k, Invk_convert_dvi_to_png)) return app_convert_dvi_to_png;
else if (ctx.Match(k, Invk_convert_djvu_to_tiff)) return app_convert_djvu_to_tiff;
else if (ctx.Match(k, Invk_view_web)) return app_web;
else if (ctx.Match(k, Invk_decompress_bz2)) return app_decompress_bz2;
else if (ctx.Match(k, Invk_decompress_zip)) return app_decompress_zip;
else if (ctx.Match(k, Invk_decompress_gz)) return app_decompress_gz;
else if (ctx.Match(k, Invk_decompress_bz2_by_stdout)) return app_decompress_bz2_by_stdout;
else if (ctx.Match(k, Invk_lua)) return app_lua;
else if (ctx.Match(k, Invk_lilypond)) return app_lilypond;
else if (ctx.Match(k, Invk_abc2ly)) return app_abc2ly;
else if (ctx.Match(k, Invk_convert_midi_to_ogg)) return app_convert_midi_to_ogg;
else if (ctx.Match(k, Invk_trim_img)) return app_trim_img;
else if (String_.Eq(k, Cfg__web)) {Init_cmd(m.ReadStr("v"), app_web);}
else if (String_.Eq(k, Cfg__media)) {Init_cmd(m.ReadStr("v"), Xof_ext_.Id_ogv, Xof_ext_.Id_webm, Xof_ext_.Id_flac, Xof_ext_.Id_ogg, Xof_ext_.Id_oga, Xof_ext_.Id_mid, Xof_ext_.Id_wav);}
@ -88,10 +79,22 @@ public class Xoa_prog_mgr implements Gfo_invk {
else if (String_.Eq(k, Cfg__svg)) {Init_cmd(m.ReadStr("v"), Xof_ext_.Id_svg);}
else if (String_.Eq(k, Cfg__pdf)) {Init_cmd(m.ReadStr("v"), Xof_ext_.Id_pdf);}
else if (String_.Eq(k, Cfg__djvu)) {Init_cmd(m.ReadStr("v"), Xof_ext_.Id_djvu);}
else if (String_.Eq(k, Cfg__gz)) {Init_cmd(m.ReadStr("v"), app_decompress_gz);}
else if (String_.Eq(k, Cfg__bz2)) {Init_cmd(m.ReadStr("v"), app_decompress_bz2);}
else if (String_.Eq(k, Cfg__bz2__stdout_cmd)) {Init_cmd(m.ReadStr("v"), app_decompress_bz2_by_stdout);}
else if (String_.Eq(k, Cfg__query_size)) {Init_cmd(m.ReadStr("v"), app_query_img_size);}
else if (String_.Eq(k, Cfg__resize_img)) {Init_cmd(m.ReadStr("v"), app_resize_img);}
else if (String_.Eq(k, Cfg__convert_svg_to_png)) {Init_cmd(m.ReadStr("v"), app_convert_svg_to_png);}
else if (String_.Eq(k, Cfg__convert_djvu_to_tiff)) {Init_cmd(m.ReadStr("v"), app_convert_djvu_to_tiff);}
else if (String_.Eq(k, Cfg__lua)) {Init_cmd(m.ReadStr("v"), app_lua);}
else if (String_.Eq(k, Cfg__lilypond)) {Init_cmd(m.ReadStr("v"), app_lilypond);}
else if (String_.Eq(k, Cfg__abc2ly)) {Init_cmd(m.ReadStr("v"), app_abc2ly);}
else if (String_.Eq(k, Cfg__trim_img)) {Init_cmd(m.ReadStr("v"), app_trim_img);}
else if (String_.Eq(k, Cfg__midi_to_ogg)) {Init_cmd(m.ReadStr("v"), app_midi_to_ogg);}
else return Gfo_invk_.Rv_unhandled;
return this;
}
private void Init_cmd(String exe_and_args, Process_adp proc) {
public static void Init_cmd(String exe_and_args, Process_adp proc) {
String[] lines = gplx.xowa.addons.apps.cfgs.Xocfg_mgr.Parse_io_cmd(exe_and_args);
proc.Exe_and_args_(lines[0], lines[1]);
}
@ -107,17 +110,26 @@ public class Xoa_prog_mgr implements Gfo_invk {
url_str = Process_adp.Escape_ampersands_if_process_is_cmd(Op_sys.Cur().Tid_is_wnt(), app_web.Exe_url().Raw(), url_str); // escape ampersands; DATE:2014-05-20
app_web.Run(url_str);
}
private static final String Invk_query_img_size = "query_img_size", Invk_resize_img = "resize_img", Invk_convert_svg_to_png = "convert_svg_to_png", Invk_convert_tex_to_dvi = "convert_tex_to_dvi", Invk_convert_dvi_to_png = "convert_dvi_to_png"
, Invk_convert_djvu_to_tiff = "convert_djvu_to_tiff", Invk_view_web = "view_web"
, Invk_decompress_bz2 = "decompress_bz2", Invk_decompress_zip = "decompress_zip", Invk_decompress_gz = "decompress_gz", Invk_decompress_bz2_by_stdout = "decompress_bz2_by_stdout"
, Invk_lua = "lua", Invk_lilypond = "lilypond", Invk_abc2ly = "abc2ly", Invk_trim_img = "trim_img", Invk_convert_midi_to_ogg = "convert_midi_to_ogg"
;
private static final String Invk_convert_tex_to_dvi = "convert_tex_to_dvi", Invk_convert_dvi_to_png = "convert_dvi_to_png";
private static final String
Cfg__web = "xowa.app.content_apps.web"
, Cfg__media = "xowa.app.content_apps.media"
, Cfg__image = "xowa.app.content_apps.image"
, Cfg__svg = "xowa.app.content_apps.svg"
, Cfg__pdf = "xowa.app.content_apps.pdf"
, Cfg__djvu = "xowa.app.content_apps.djvu"
Cfg__web = "xowa.app.content_apps.web"
, Cfg__media = "xowa.app.content_apps.media"
, Cfg__image = "xowa.app.content_apps.image"
, Cfg__svg = "xowa.app.content_apps.svg"
, Cfg__pdf = "xowa.app.content_apps.pdf"
, Cfg__djvu = "xowa.app.content_apps.djvu"
, Cfg__bz2__stdout_cmd = "xowa.wiki.import.bz2.stdout_cmd"
, Cfg__bz2 = "xowa.wiki.import.apps.bz2"
, Cfg__gz = "xowa.wiki.import.apps.gz"
, Cfg__query_size = "xowa.wiki.files.apps.query_size"
, Cfg__resize_img = "xowa.wiki.files.apps.resize_img"
, Cfg__convert_svg_to_png = "xowa.wiki.files.apps.convert_svg_to_png"
, Cfg__convert_djvu_to_tiff = "xowa.wiki.files.apps.convert_djvu_to_tiff"
, Cfg__lua = "xowa.addon.scribunto.lua.cmd"
, Cfg__lilypond = "xowa.addon.score.apps.lilypond"
, Cfg__abc2ly = "xowa.addon.score.apps.abc2ly"
, Cfg__trim_img = "xowa.addon.score.apps.trim_img"
, Cfg__midi_to_ogg = "xowa.addon.score.apps.midi_to_ogg"
;
}

View File

@ -75,6 +75,7 @@ public class Http_server_mgr implements Gfo_invk {
running = val;
}
public void Run() {
app.Cfg().Bind_many_app(this, Cfg__port, Cfg__file_retrieve_mode);
if (wkr == null) wkr = new Http_server_socket(this);
Thread_adp_.Start_by_key("thread:xowa.http_server.server", wkr, Http_server_socket.Invk_run);
Note("HTTP Server started: Navigate to http://localhost:" + Int_.To_str(port));
@ -136,19 +137,15 @@ public class Http_server_mgr implements Gfo_invk {
usr_dlg.Note_many("", "", s);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_port)) return port;
else if (ctx.Match(k, Invk_port_)) Port_(m.ReadInt("v"));
else if (ctx.Match(k, Invk_running)) return Yn.To_str(running);
if (ctx.Match(k, Cfg__port)) Port_(m.ReadInt("v"));
else if (ctx.Match(k, Cfg__file_retrieve_mode)) retrieve_mode = File_retrieve_mode.Xto_byte(m.ReadStr("v"));
else if (ctx.Match(k, Invk_running_)) Running_(m.ReadYn("v"));
else if (ctx.Match(k, Invk_retrieve_mode)) return File_retrieve_mode.Xto_str(retrieve_mode);
else if (ctx.Match(k, Invk_retrieve_mode_)) retrieve_mode = File_retrieve_mode.Xto_byte(m.ReadStr("v"));
else if (ctx.Match(k, Invk_retrieve_mode_list)) return File_retrieve_mode.Options__list;
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String Invk_running_ = "running_";
private static final String
Invk_port = "port", Invk_port_ = "port_"
, Invk_running = "running", Invk_running_ = "running_"
, Invk_retrieve_mode = "retrieve_mode", Invk_retrieve_mode_ = "retrieve_mode_", Invk_retrieve_mode_list = "retrieve_mode_list"
;
Cfg__port = "xowa.addon.http_server.port"
, Cfg__file_retrieve_mode = "xowa.addon.http_server.file_retrieve_mode";
}

View File

@ -0,0 +1,65 @@
/*
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.bldrs; import gplx.*; import gplx.xowa.*;
import gplx.core.ios.*;
import gplx.xowa.wikis.data.*;
public class Xobldr_cfg {
private static long layout_all_max = 0; // disable by default; may set to 200 MB in future
private static long layout_text_max = Io_size_.To_long_by_int_mb(1500); // 1.0 GB
private static long layout_html_max = Io_size_.To_long_by_int_mb(1500); // 1.0 GB
private static long layout_file_max = Io_size_.To_long_by_int_mb(1500); // 1.0 GB
private static boolean hzip_enabled = Bool_.Y;
private static boolean hzip_mode_is_b256 = Bool_.Y;
public static byte Zip_mode__text(Xoa_app app) {return Zip_mode(app, Cfg__zip_mode__text);}
public static byte Zip_mode__html(Xoa_app app) {return Zip_mode(app, Cfg__zip_mode__html);}
private static byte Zip_mode(Xoa_app app, String key) {
String val = app.Cfg().Get_str_app_or(key, "gzip");
return gplx.core.ios.streams.Io_stream_tid_.To_tid(val);
}
public static long Max_size__text(Xoa_app app) {return Max_size(app, Cfg__max_size__text);}
public static long Max_size__html(Xoa_app app) {return Max_size(app, Cfg__max_size__html);}
public static long Max_size__file(Xoa_app app) {return Max_size(app, Cfg__max_size__file);}
private static long Max_size(Xoa_app app, String key) {
return app.Cfg().Get_long_app_or(key, Io_size_.To_long_by_int_mb(1500));
}
public static byte[] New_ns_file_map(long dump_file_size) {
return dump_file_size < layout_text_max
? gplx.xowa.bldrs.cmds.Xob_ns_file_itm_parser.Ns_file_map__few
: gplx.xowa.bldrs.cmds.Xob_ns_file_itm_parser.Ns_file_map__each; // DB.FEW: DATE:2016-06-07
}
public static Xowd_core_db_props New_props(Xoa_app app, String domain_str, long dump_file_size) {
Xow_db_layout layout_text, layout_html, layout_file;
if (dump_file_size < layout_all_max)
layout_text = layout_html = layout_file = Xow_db_layout.Itm_all;
else {
layout_text = dump_file_size < layout_text_max ? Xow_db_layout.Itm_few : Xow_db_layout.Itm_lot;
layout_html = dump_file_size < layout_html_max ? Xow_db_layout.Itm_few : Xow_db_layout.Itm_lot;
layout_file = dump_file_size < layout_file_max ? Xow_db_layout.Itm_few : Xow_db_layout.Itm_lot;
}
return new Xowd_core_db_props(2, layout_text, layout_html, layout_file, Zip_mode__text(app), Zip_mode__html(app), hzip_enabled, hzip_mode_is_b256);
}
private static final String
Cfg__zip_mode__text = "xowa.wiki.database.zip_mode.text"
, Cfg__zip_mode__html = "xowa.wiki.database.zip_mode.html"
, Cfg__max_size__text = "xowa.wiki.database.max_size.text"
, Cfg__max_size__html = "xowa.wiki.database.max_size.html"
, Cfg__max_size__file = "xowa.wiki.database.max_size.file"
;
public static final byte[] Ns_file_map__each = Bry_.new_a7("<each>");
}

View File

@ -31,12 +31,12 @@ public class Xob_page_cmd extends Xob_itm_basic_base implements Xob_page_wkr, Gf
public String Page_wkr__key() {return Xob_cmd_keys.Key_text_page;}
public void Page_wkr__bgn() {
Xoae_app app = wiki.Appe();
Xoapi_import import_cfg = app.Api_root().Bldr().Wiki().Import();
this.redirect_mgr = wiki.Redirect_mgr();
this.db_mgr = wiki.Db_mgr_as_sql().Core_data_mgr();
this.page_core_tbl = db_mgr.Tbl__page();
this.text_zip_mgr = wiki.Utl__zip_mgr(); text_zip_tid = import_cfg.Zip_tid_text();
this.ns_to_db_mgr = new Xob_ns_to_db_mgr(new Xob_ns_to_db_wkr__text(), db_mgr, import_cfg.Text_db_max());
this.text_zip_mgr = wiki.Utl__zip_mgr();
text_zip_tid = Xobldr_cfg.Zip_mode__text(app);
this.ns_to_db_mgr = new Xob_ns_to_db_mgr(new Xob_ns_to_db_wkr__text(), db_mgr, Xobldr_cfg.Max_size__text(app));
this.dg_match_mgr = Dg_match_mgr.New_mgr(app, wiki);
if (dg_match_mgr != null) redirect_id_enabled = true; // always enable redirect_id if dg_match_mgr enabled; DATE:2016-01-04
if (redirect_id_enabled) {
@ -44,7 +44,7 @@ public class Xob_page_cmd extends Xob_itm_basic_base implements Xob_page_wkr, Gf
redirect_tbl.Conn().Txn_bgn("bldr__page__redirect");
}
app.Bldr().Dump_parser().Trie_tab_del_(); // disable swapping &#09; for \t
byte[] ns_file_map = import_cfg.New_ns_file_map(wiki.Import_cfg().Src_rdr_len());
byte[] ns_file_map = Xobldr_cfg.New_ns_file_map(wiki.Import_cfg().Src_rdr_len());
Xob_ns_file_itm.Init_ns_bldr_data(Xow_db_file_.Tid__text, wiki.Ns_mgr(), ns_file_map);
if (idx_mode.Tid_is_bgn()) page_core_tbl.Create_idx();
page_core_tbl.Insert_bgn();

View File

@ -1,37 +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.bldrs.cmds.texts.sqls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
import org.junit.*; import gplx.dbs.*; import gplx.xowa.bldrs.*; import gplx.xowa.addons.wikis.ctgs.bldrs.*; import gplx.xowa.wikis.nss.*;
public class Xob_page_cmd_tst {
@Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Ctor_fsys();} Db_mgr_fxt fxt = new Db_mgr_fxt();
@After public void term() {if (Xoa_test_.Db_skip()) return; fxt.Rls();}
@Test public void Basic() {
if (Xoa_test_.Db_skip()) return;
fxt.Init_db_sqlite();
fxt.Bldr().App().Api_root().Bldr().Wiki().Import().Zip_tid_text_raw_();
fxt.doc_ary_
( fxt.doc_(2, "2013-06-03 01:23", "A", "text_a")
, fxt.doc_(1, "2013-06-03 12:34", "B", "#REDIRECT [[A]]")
)
.Exec_run(new Xob_page_cmd(fxt.Bldr(), fxt.Wiki()))
;
fxt.Test_load_ttl(Xow_ns_.Tid__main, "A", fxt.page_(2, "2013-06-03 01:23", false, 6));
fxt.Test_load_page(Xow_ns_.Tid__main, 2, "text_a");
fxt.Test_load_ttl(Xow_ns_.Tid__main, "B", fxt.page_(1, "2013-06-03 12:34", true, 15));
}
}

View File

@ -93,10 +93,8 @@ class Xoi_cmd_search2_build extends Xoi_cmd_base {
public Xoi_cmd_search2_build(Xoi_setup_mgr install_mgr, String wiki_key) {this.Ctor(install_mgr, wiki_key);}
@Override public String Async_key() {return KEY;} public static final String KEY = "wiki.search2.build";
@Override public void Process_async_init(Xoae_app app, Xowe_wiki wiki, Xob_bldr bldr) {
if (app.Setup_mgr().Dump_mgr().Wiki_storage_type_is_sql()) {
wiki.Db_mgr_as_sql().Category_version_update(false);
gplx.xowa.addons.wikis.searchs.bldrs.Srch_bldr_mgr_.Setup(wiki);
}
wiki.Db_mgr_as_sql().Category_version_update(false);
gplx.xowa.addons.wikis.searchs.bldrs.Srch_bldr_mgr_.Setup(wiki);
}
@Override public void Process_async_done(Xoae_app app, Xowe_wiki wiki, Xob_bldr bldr) {
app.Usr_dlg().Prog_many("", "", "search2 setup done");

View File

@ -20,24 +20,34 @@ import gplx.core.ios.*; import gplx.core.ios.streams.*;
import gplx.xowa.bldrs.wms.dumps.*;
public class Xoi_dump_mgr implements Gfo_invk {
public String[] Server_urls() {return server_urls;} private String[] server_urls = String_.Ary(Xowm_dump_file_.Server_your_org, Xowm_dump_file_.Server_wmf_https, Xowm_dump_file_.Server_c3sl, Xowm_dump_file_.Server_masaryk); // promote your.org to primary url; DATE:2016-08-07
public boolean Import_bz2_by_stdout() {return import_bz2_by_stdout;} private boolean import_bz2_by_stdout = true;
public String[] Custom_cmds() {return custom_cmds;} private String[] custom_cmds = String_.Ary(Xoi_cmd_wiki_download.Key_wiki_download, Xoi_cmd_wiki_import.KEY);
public byte Data_storage_format() {return data_storage_format;} public Xoi_dump_mgr Data_storage_format_(byte v) {data_storage_format = v; return this;} private byte data_storage_format = gplx.core.ios.streams.Io_stream_tid_.Tid__gzip;
public long Db_text_max() {return db_text_max;} private long db_text_max = (long)3000 * Io_mgr.Len_mb;
public long Db_categorylinks_max() {return db_categorylinks_max;} private long db_categorylinks_max = (long)3600 * Io_mgr.Len_mb;
public long Db_wikidata_max() {return db_wikidata_max;} private long db_wikidata_max = (long)3600 * Io_mgr.Len_mb;
public byte Wiki_storage_type() {return wiki_storage_type;} private byte wiki_storage_type = Wiki_storage_type_sqlite;
public boolean Wiki_storage_type_is_sql() {return wiki_storage_type == Wiki_storage_type_sqlite;}
public String Db_ns_map() {return db_ns_map;} private String db_ns_map = "Template~Module";
public boolean Css_wiki_update() {return css_wiki_update;} private boolean css_wiki_update = true;
public boolean Css_commons_download() {return css_commons_download;} private boolean css_commons_download = true; // changed from false to true; DATE:2014-10-19
public boolean Delete_xml_file() {return delete_xml_file;} private boolean delete_xml_file = true;
public byte Search_version() {return search_version;} private byte search_version = gplx.xowa.addons.wikis.searchs.specials.Srch_special_page.Version_2;
public boolean Import_bz2_by_stdout() {return import_bz2_by_stdout;} private boolean import_bz2_by_stdout = true;
public int Page_rank_iterations() {return page_rank_iteration_max;} private int page_rank_iteration_max = 0;
public void Init_by_wiki(Xow_wiki wiki) {
wiki.App().Cfg().Bind_many_app(this
, Cfg__server_urls, Cfg__download_xowa_commons, Cfg__delete_xml_file
, Cfg__custom_wiki_commands, Cfg__bz2__stdout_enabled
, Cfg__page_rank__iteration_max
);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_server_urls)) return String_.Concat_with_str(",\n", server_urls);
else if (ctx.Match(k, Invk_server_urls_)) server_urls = m.ReadStrAryIgnore("v", ",", "\n");
else if (ctx.Match(k, Invk_custom_cmds)) return String_.Concat_with_str(",", custom_cmds);
else if (ctx.Match(k, Invk_custom_cmds_)) custom_cmds = String_.Ary_filter(m.ReadStrAry("v", ","), Xoi_cmd_mgr.Wiki_cmds_valid);
if (ctx.Match(k, Cfg__server_urls)) server_urls = m.ReadStrAryIgnore("v", ",", "\n");
else if (ctx.Match(k, Cfg__download_xowa_commons)) css_commons_download = m.ReadYn("v");
else if (ctx.Match(k, Cfg__delete_xml_file)) delete_xml_file = m.ReadYn("v");
else if (ctx.Match(k, Cfg__custom_wiki_commands)) custom_cmds = String_.Ary_filter(m.ReadStrAry("v", ","), Xoi_cmd_mgr.Wiki_cmds_valid);
else if (ctx.Match(k, Cfg__bz2__stdout_enabled)) import_bz2_by_stdout = m.ReadYn("v");
else if (ctx.Match(k, Cfg__page_rank__iteration_max)) page_rank_iteration_max = m.ReadInt("v");
else if (ctx.Match(k, Invk_data_storage_format)) return Io_stream_tid_.Obsolete_to_str(data_storage_format);
else if (ctx.Match(k, Invk_data_storage_format_)) data_storage_format = Io_stream_tid_.Obsolete_to_tid(m.ReadStr("v"));
else if (ctx.Match(k, Invk_data_storage_format_list)) return Options_data_storage_format_list;
@ -49,50 +59,32 @@ public class Xoi_dump_mgr implements Gfo_invk {
else if (ctx.Match(k, Invk_db_wikidata_max_)) db_wikidata_max = m.ReadLong("v") * Io_mgr.Len_mb;
else if (ctx.Match(k, Invk_db_ns_map)) return db_ns_map;
else if (ctx.Match(k, Invk_db_ns_map_)) db_ns_map = m.ReadStr("v");
else if (ctx.Match(k, Invk_wiki_storage_type)) return Wiki_storage_type_str(wiki_storage_type);
else if (ctx.Match(k, Invk_wiki_storage_type_)) wiki_storage_type = Wiki_storage_type_parse(m.ReadStr("v"));
else if (ctx.Match(k, Invk_wiki_storage_type_list)) return Options_storage_type_list;
else if (ctx.Match(k, Invk_css_wiki_update)) return Yn.To_str(css_wiki_update);
else if (ctx.Match(k, Invk_css_wiki_update_)) css_wiki_update = m.ReadYn("v");
else if (ctx.Match(k, Invk_css_commons_download)) return Yn.To_str(css_commons_download);
else if (ctx.Match(k, Invk_css_commons_download_)) css_commons_download = m.ReadYn("v");
else if (ctx.Match(k, Invk_delete_xml_file)) return Yn.To_str(delete_xml_file);
else if (ctx.Match(k, Invk_delete_xml_file_)) delete_xml_file = m.ReadYn("v");
else if (ctx.Match(k, Invk_search_version)) return Options_search_version_str(search_version);
else if (ctx.Match(k, Invk_search_version_)) search_version = Options_search_version_parse(m.ReadStr("v"));
else if (ctx.Match(k, Invk_search_version_list)) return Options_search_version_list;
else if (ctx.Match(k, Invk_import_bz2_by_stdout)) return Yn.To_str(import_bz2_by_stdout);
else if (ctx.Match(k, Invk_import_bz2_by_stdout_)) import_bz2_by_stdout = m.ReadYn("v");
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String Invk_server_urls = "server_urls", Invk_server_urls_ = "server_urls_", Invk_custom_cmds = "custom_cmds", Invk_custom_cmds_ = "custom_cmds_"
, Invk_data_storage_format = "data_storage_format", Invk_data_storage_format_ = "data_storage_format_", Invk_data_storage_format_list = "data_storage_format_list"
private static final String Invk_data_storage_format = "data_storage_format", Invk_data_storage_format_ = "data_storage_format_", Invk_data_storage_format_list = "data_storage_format_list"
, Invk_db_text_max = "db_text_max", Invk_db_text_max_ = "db_text_max_", Invk_db_categorylinks_max = "db_categorylinks_max", Invk_db_categorylinks_max_ = "db_categorylinks_max_", Invk_db_wikidata_max = "db_wikidata_max", Invk_db_wikidata_max_ = "db_wikidata_max_"
, Invk_db_ns_map = "db_ns_map", Invk_db_ns_map_ = "db_ns_map_"
, Invk_wiki_storage_type = "wiki_storage_type", Invk_wiki_storage_type_ = "wiki_storage_type_", Invk_wiki_storage_type_list = "wiki_storage_type_list"
, Invk_css_wiki_update = "css_wiki_update", Invk_css_wiki_update_ = "css_wiki_update_"
, Invk_css_commons_download = "css_commons_download", Invk_css_commons_download_ = "css_commons_download_"
, Invk_delete_xml_file = "delete_xml_file", Invk_delete_xml_file_ = "delete_xml_file_"
, Invk_search_version = "search_version", Invk_search_version_ = "search_version_", Invk_search_version_list = "search_version_list"
, Invk_import_bz2_by_stdout = "import_bz2_by_stdout", Invk_import_bz2_by_stdout_ = "import_bz2_by_stdout_"
;
private static Keyval[] Options_data_storage_format_list = Keyval_.Ary(Keyval_.new_(".xdat", "text"), Keyval_.new_(".gz", "gzip"), Keyval_.new_(".bz2", "bzip2")); // removed .zip; DATE:2014-05-13; updated aliases; DATE:2014-06-20
static final byte Wiki_storage_type_xdat = 1, Wiki_storage_type_sqlite = 2;
private static final Keyval[] Options_storage_type_list = Keyval_.Ary(Keyval_.new_("sqlite"), Keyval_.new_("xdat")); // DEPRECATED: Keyval_.new_("xdat"); DATE:2015-03-30
public static String Wiki_storage_type_str(byte v) {
switch (v) {
case Xoi_dump_mgr.Wiki_storage_type_xdat : return "xdat";
case Xoi_dump_mgr.Wiki_storage_type_sqlite : return "sqlite";
default : throw Err_.new_unhandled(v);
}
}
public static byte Wiki_storage_type_parse(String v) {
if (String_.Eq(v, "xdat")) return Xoi_dump_mgr.Wiki_storage_type_xdat;
else if (String_.Eq(v, "sqlite")) return Xoi_dump_mgr.Wiki_storage_type_sqlite;
else throw Err_.new_unhandled(v);
}
private static final Keyval[] Options_search_version_list = Keyval_.Ary(Keyval_.new_("1"), Keyval_.new_("2"));
public static String Options_search_version_str(byte v) {return Byte_.To_str(v);}
public static byte Options_search_version_parse(String v) {return Byte_.parse(v);}
private static final String
Cfg__server_urls = "xowa.wiki.import.general.dump_servers"
, Cfg__download_xowa_commons = "xowa.wiki.import.general.download_xowa_common"
, Cfg__delete_xml_file = "xowa.wiki.import.general.delete_xml_file"
, Cfg__custom_wiki_commands = "xowa.wiki.import.general.custom_wiki_commands"
, Cfg__bz2__stdout_enabled = "xowa.wiki.import.bz2.stdout_enabled"
, Cfg__page_rank__iteration_max = "xowa.wiki.import.page_rank.iteration_max"
;
}

View File

@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.bldrs.setups.addons; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.setups.*;
public class Xoi_addon_mgr implements Gfo_invk {
public Xoi_firefox_installer Firefox() {return firefox;} private Xoi_firefox_installer firefox = new Xoi_firefox_installer();
Xoi_firefox_installer Firefox() {return firefox;} private Xoi_firefox_installer firefox = new Xoi_firefox_installer();
public void Init_by_app(Xoae_app app) {
firefox.Init_by_app(app);
}

View File

@ -28,6 +28,7 @@ public class Xoi_firefox_installer implements Gfo_invk {
trg_xpi_package = trg_xpi.OwnerDir().GenSubDir("package");
Xoa_fsys_eval cmd_eval = app.Url_cmd_eval();
Process_adp.ini_(this, app.Usr_dlg(), program, cmd_eval, Process_adp.Run_mode_async, 0, "firefox", "\"~{url}\"", "url");
app.Cfg().Bind_many_app(this, Cfg__firefox_cmd);
}
public void Install_via_process() {
Generate();
@ -57,9 +58,11 @@ public class Xoi_firefox_installer implements Gfo_invk {
+ String_.Mid(src, end);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_program)) return program;
if (ctx.Match(k, Invk_install)) Install_via_process();
else if (ctx.Match(k, Cfg__firefox_cmd)) gplx.xowa.apps.progs.Xoa_prog_mgr.Init_cmd(m.ReadStr("v"), program);
else return Gfo_invk_.Rv_unhandled;
return this;
} private static final String Invk_program = "program", Invk_install = "install";
} private static final String Invk_install = "install";
private static final String Cfg__firefox_cmd = "xowa.addon.xowa_viewer.firefox";
}

View File

@ -1,40 +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.bldrs.wms; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*;
import gplx.xowa.apps.wms.apis.*; import gplx.xowa.wikis.*;
public class Xoa_wmf_mgr implements Gfo_invk {
private final Xoae_wiki_mgr wiki_mgr;
public Xoa_wmf_mgr(Gfo_usr_dlg usr_dlg, Xoae_wiki_mgr wiki_mgr) {
this.wiki_mgr = wiki_mgr;
}
public boolean Enabled() {return enabled;} private boolean enabled = true; // default to true; DATE:2015-01-05
public void Enabled_(boolean v) {
enabled = v;
int len = wiki_mgr.Count();
for (int i = 0; i < len; i++) {
Xowe_wiki wiki = wiki_mgr.Get_at_or_null(i);
wiki.File_mgr().Cfg_download().Enabled_(v);
}
}
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 return Gfo_invk_.Rv_unhandled;
return this;
} private static final String Invk_enabled = "enabled", Invk_enabled_ = "enabled_";
}

View File

@ -18,20 +18,24 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.files; import gplx.*; import gplx.xowa.*;
public class Xof_cfg_download implements Gfo_invk {
public Xof_cfg_download() {
this.enabled = true; // CFG: set to false b/c some tests only do parsing [[File:A.png]] and repos are not set up
this.enabled = true; // changed to true; DATE:2016-12-19; OLD: CFG: set to false b/c some tests only do parsing [[File:A.png]] and repos are not set up
this.redownload = Redownload_none; // CFG: set to none to be as conservative as possible
}
public boolean Enabled() {return enabled;} public Xof_cfg_download Enabled_(boolean v) {enabled = v; return this;} private boolean enabled;
public byte Redownload() {return redownload;} public Xof_cfg_download Redownload_(byte v) {redownload = v; return this;} private byte redownload;
public void Init_by_wiki(Xow_wiki wiki) {
wiki.App().Cfg().Bind_many_app(this, Cfg__retrieval_enabled);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_enabled_)) enabled = m.ReadYn("v");
if (ctx.Match(k, Cfg__retrieval_enabled)) enabled = m.ReadYn("v");
else if (ctx.Match(k, Invk_redownload)) return Redownload_to_str_(redownload);
else if (ctx.Match(k, Invk_redownload_)) redownload = Redownload_parse_(m.ReadStr("v"));
else if (ctx.Match(k, Invk_redownload_toggle)) redownload = redownload == Redownload_none ? Redownload_missing : Redownload_none;
else return Gfo_invk_.Rv_unhandled;
return this;
} private static final String Invk_enabled_ = "enabled_", Invk_redownload = "redownload", Invk_redownload_ = "redownload_", Invk_redownload_toggle = "redownload_toggle";
} private static final String Invk_redownload = "redownload", Invk_redownload_ = "redownload_", Invk_redownload_toggle = "redownload_toggle";
byte Redownload_parse_(String s) {
if (String_.Eq(s, "none")) return Redownload_none;
else if (String_.Eq(s, "missing")) return Redownload_missing;
@ -47,4 +51,5 @@ public class Xof_cfg_download implements Gfo_invk {
default: throw Err_.new_unhandled(v);
}
}
private static final String Cfg__retrieval_enabled = "xowa.wiki.files.retrieval_enabled";
}

View File

@ -26,13 +26,13 @@ public class Xof_file_mgr implements Gfo_invk {
public Xof_cache_mgr Cache_mgr() {return cache_mgr;} private Xof_cache_mgr cache_mgr;
public Xof_math_mgr Math_mgr() {return math_mgr;} private final Xof_math_mgr math_mgr = new Xof_math_mgr();
public Xof_rule_mgr Ext_rules() {return ext_rules;} private final Xof_rule_mgr ext_rules = new Xof_rule_mgr();
public Xoa_wmf_mgr Wmf_mgr() {return wmf_mgr;} private Xoa_wmf_mgr wmf_mgr;
public void Ctor_by_app(Xoae_app app) {
Gfo_usr_dlg usr_dlg = app.Usr_dlg();
this.cache_mgr = new Xof_cache_mgr(usr_dlg, app.Wiki_mgr(), repo_mgr);
this.repo_mgr = new Xoa_repo_mgr(app.Fsys_mgr(), ext_rules);
this.wmf_mgr = new Xoa_wmf_mgr(usr_dlg, app.Wiki_mgr());
img_mgr.Init_by_app(app.Wmf_mgr(), app.Prog_mgr());
}
public void Init_by_app(Xoae_app app) {
math_mgr.Init_by_app(app);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
@ -40,8 +40,7 @@ public class Xof_file_mgr implements Gfo_invk {
else if (ctx.Match(k, Invk_img_mgr)) return img_mgr;
else if (ctx.Match(k, Invk_ext_rules)) return ext_rules;
else if (ctx.Match(k, Invk_math)) return math_mgr;
else if (ctx.Match(k, Invk_download)) return wmf_mgr; // NOTE: do not rename "download" to wmf_mgr
else if (ctx.Match(k, Invk_cache_mgr)) return cache_mgr;
else return Gfo_invk_.Rv_unhandled;
} private static final String Invk_repos = "repos", Invk_img_mgr= "img_mgr", Invk_ext_rules = "ext_rules", Invk_math = "math", Invk_download = "download", Invk_cache_mgr = "cache_mgr";
} private static final String Invk_repos = "repos", Invk_img_mgr= "img_mgr", Invk_ext_rules = "ext_rules", Invk_math = "math", Invk_cache_mgr = "cache_mgr";
}

View File

@ -70,6 +70,9 @@ public class Xow_file_mgr implements Gfo_invk {
public Xowe_repo_mgr Repo_mgr() {return repo_mgr;} private Xowe_repo_mgr repo_mgr;
public Xof_meta_mgr Dbmeta_mgr() {return meta_mgr;} private Xof_meta_mgr meta_mgr;
public Xof_cfg_download Cfg_download() {return cfg_download;} private Xof_cfg_download cfg_download = new Xof_cfg_download();
public void Init_by_wiki(Xow_wiki wiki) {
cfg_download.Init_by_wiki(wiki);
}
public void Cfg_set(String grp, String key, String val) { // TEST: should only be called by tests
if (test_grps == null) test_grps = Hash_adp_.New();
Db_cfg_hash grp_itm = (Db_cfg_hash)test_grps.Get_by(grp);

View File

@ -19,7 +19,7 @@ package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.x
import gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.cfgs.*;
import gplx.xowa.files.fsdb.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.imgs.*;
import gplx.xowa.wikis.*; import gplx.xowa.wikis.domains.*; import gplx.xowa.users.data.*;
public class Xou_cache_mgr {
public class Xou_cache_mgr implements Gfo_invk {
private final Xoa_wiki_mgr wiki_mgr; private final Xou_cache_tbl cache_tbl; private final Db_cfg_tbl cfg_tbl; private final Bry_bfr tmp_bfr = Bry_bfr_.Reset(512);
private final Ordered_hash hash = Ordered_hash_.New_bry(); private final Xof_url_bldr url_bldr = Xof_url_bldr.new_v2(); private final Object thread_lock = new Object();
private final Io_url cache_dir; private boolean db_load_needed = true;
@ -49,6 +49,10 @@ public class Xou_cache_mgr {
, Keyval_.new_("oldest file", view_date == Long_.Max_value ? "" : DateAdp_.unixtime_utc_seconds_(view_date).XtoStr_fmt_iso_8561())
);
}
public void Init_by_app(Xoa_app app) {
app.Cfg().Bind_many_app(this, Cfg__fsys_size_min, Cfg__fsys_size_max, Run__fsys_clear);
// app.Cfg().Exec_mgr().Add(this, Run__fsys_clear);
}
public Xou_cache_itm Get_or_null(Xof_fsdb_itm fsdb) {return Get_or_null(fsdb.Lnki_wiki_abrv(), fsdb.Lnki_ttl(), fsdb.Lnki_type(), fsdb.Lnki_upright(), fsdb.Lnki_w(), fsdb.Lnki_h(), fsdb.Lnki_time(), fsdb.Lnki_page(), fsdb.User_thumb_w());}
public Xou_cache_itm Get_or_null(byte[] wiki, byte[] ttl, int type, double upright, int w, int h, double time, int page, int user_thumb_w) {
if (!enabled) return null;
@ -175,6 +179,19 @@ public class Xou_cache_mgr {
, Xof_lnki_time.Convert_to_xowa_page (orig_ext.Id(), cache.File_page())
).Xto_url();
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Cfg__fsys_size_min)) this.fsys_size_min = m.ReadLong("v");
else if (ctx.Match(k, Cfg__fsys_size_max)) this.fsys_size_max = m.ReadLong("v");
// else if (ctx.Match(k, Run__fsys_clear)) this.Reduce(0);
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String
Cfg__fsys_size_min = "xowa.wiki.files.cache.fsys_size_min"
, Cfg__fsys_size_max = "xowa.wiki.files.cache.fsys_size_max"
, Run__fsys_clear = "xowa.wiki.files.cache.clear"
;
}
class Xou_cache_grp {
private final List_adp list = List_adp_.New();

View File

@ -20,7 +20,7 @@ import gplx.core.primitives.*; import gplx.dbs.*;
import gplx.core.ios.*; import gplx.xowa.wikis.domains.*; import gplx.xowa.files.*;
import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.*;
public class Xof_xfer_queue_html_fxt extends Xof_xfer_queue_base_fxt {
private final Xof_xfer_queue queue = new Xof_xfer_queue();
private final Xof_xfer_queue queue = new Xof_xfer_queue();
@Override public void Clear(boolean src_repo_is_wmf) {
Db_conn_bldr.Instance.Reg_default_mem();
super.Clear(src_repo_is_wmf);
@ -50,7 +50,6 @@ public class Xof_xfer_queue_html_fxt extends Xof_xfer_queue_base_fxt {
@gplx.Virtual public void tst() {
Xowe_wiki wiki = this.En_wiki();
ini_src_fils();
wiki.Appe().File_mgr().Wmf_mgr().Enabled_(true);
wiki.File_mgr().Cfg_download().Enabled_(true);
queue.Exec(wiki, Xoae_page.New(wiki, wiki.Ttl_parse(Bry_.new_a7("A"))));
tst_trg_fils();

View File

@ -18,8 +18,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.files.xfers; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
import org.junit.*; import gplx.xowa.parsers.lnkis.*;
public class Xof_xfer_queue_html_wmf_api_tst {
private final Xof_xfer_queue_html_fxt fxt = new Xof_xfer_queue_html_fxt();
@Before public void init() {fxt.Clear(true); fxt.Src_commons_repo().Wmf_api_(true); fxt.Src_en_wiki_repo().Wmf_api_(true);}
private final Xof_xfer_queue_html_fxt fxt = new Xof_xfer_queue_html_fxt();
@Before public void init() {
gplx.core.ios.IoEngine_system.Web_access_enabled = true; // NOTE: must set to true, else Wmf_api calls below will always return false
fxt.Clear(true); fxt.Src_commons_repo().Wmf_api_(true); fxt.Src_en_wiki_repo().Wmf_api_(true);
}
@Test public void Thumb() {
fxt .ini_page_api("en_wiki", "A.png", "", 2200, 2000);
fxt .Lnki_thumb_("A.png", 220)

View File

@ -20,7 +20,7 @@ import gplx.core.brys.fmtrs.*; import gplx.core.envs.*;
import gplx.gfui.*; import gplx.gfui.ipts.*; import gplx.gfui.kits.core.*; import gplx.gfui.controls.windows.*; import gplx.gfui.controls.standards.*;
import gplx.xowa.addons.wikis.searchs.*; import gplx.xowa.guis.menus.*; import gplx.xowa.guis.cmds.*; import gplx.xowa.apps.cfgs.gui.*; import gplx.xowa.users.*;
import gplx.xowa.langs.*;
import gplx.xowa.guis.bnds.*; import gplx.xowa.guis.views.*; import gplx.xowa.guis.urls.url_macros.*;
import gplx.xowa.guis.bnds.*; import gplx.xowa.guis.views.*; import gplx.xowa.guis.urls.url_macros.*; import gplx.xowa.addons.wikis.searchs.gui.htmlbars.*;
import gplx.xowa.guis.views.boots.*;
public class Xoa_gui_mgr implements Gfo_evt_itm, Gfo_invk {
public Xoa_gui_mgr(Xoae_app app) {
@ -30,7 +30,6 @@ public class Xoa_gui_mgr implements Gfo_evt_itm, Gfo_invk {
bnd_mgr = new Xog_bnd_mgr(browser_win);
html_mgr = new Xog_html_mgr(app);
menu_mgr = new Xog_menu_mgr(this);
search_cfg = new Srch_search_cfg(app);
}
public Gfo_evt_mgr Evt_mgr() {return ev_mgr;} private Gfo_evt_mgr ev_mgr;
public Xoae_app App() {return app;} private Xoae_app app;
@ -42,7 +41,6 @@ public class Xoa_gui_mgr implements Gfo_evt_itm, Gfo_invk {
public Xocfg_win Win_cfg() {return win_cfg;} private Xocfg_win win_cfg = new Xocfg_win();
public Xog_layout Layout() {return layout;} private Xog_layout layout = new Xog_layout();
public Xog_html_mgr Html_mgr() {return html_mgr;} private Xog_html_mgr html_mgr;
public Srch_search_cfg Search_cfg() {return search_cfg;} private Srch_search_cfg search_cfg;
public Xog_menu_mgr Menu_mgr() {return menu_mgr;} private Xog_menu_mgr menu_mgr;
public Xog_url_macro_mgr Url_macro_mgr() {return url_macro_mgr;} private Xog_url_macro_mgr url_macro_mgr = new Xog_url_macro_mgr();
public void Show_prog() {
@ -75,6 +73,7 @@ public class Xoa_gui_mgr implements Gfo_evt_itm, Gfo_invk {
layout.Init(browser_win);
cmd_mgr.Init_by_kit(app);
app.Api_root().Init_by_kit(app);
app.Addon_mgr().Init_by_kit(app, kit);
menu_mgr.Menu_bldr().Init_by_kit(app, kit, app.Fsys_mgr().Bin_xowa_file_dir().GenSubDir_nest("app.menu"));
menu_mgr.Init_by_kit();
bnd_mgr.Init_by_kit(app);
@ -97,7 +96,6 @@ public class Xoa_gui_mgr implements Gfo_evt_itm, Gfo_invk {
else if (ctx.Match(k, Invk_win_opts)) return win_cfg;
else if (ctx.Match(k, Invk_layout)) return layout;
else if (ctx.Match(k, Invk_html)) return html_mgr;
else if (ctx.Match(k, Invk_search_suggest)) return search_cfg;
else if (ctx.Match(k, Invk_menus)) return menu_mgr;
else if (ctx.Match(k, Invk_cmds)) return cmd_mgr;
else if (ctx.Match(k, Invk_url_macros)) return url_macro_mgr;
@ -109,7 +107,7 @@ public class Xoa_gui_mgr implements Gfo_evt_itm, Gfo_invk {
Invk_kit = "kit", Invk_kit_ = "kit_", Invk_browser_type = "browser_type_", Invk_xul_runner_path_ = "xul_runner_path_", Invk_run = "run"
, Invk_main_win = "main_win", Invk_browser_win = "browser_win", Invk_bnds = "bnds"
, Invk_bindings = "bindings", Invk_win_opts = "win_opts", Invk_layout = "layout", Invk_html = "html"
, Invk_search_suggest = "search_suggest", Invk_menus = "menus", Invk_cmds = "cmds", Invk_url_macros = "url_macros";
, Invk_menus = "menus", Invk_cmds = "cmds", Invk_url_macros = "url_macros";
public void Run(Rls_able splash_win) {
Gfo_log_bfr log_bfr = app.Log_bfr();
try {

View File

@ -0,0 +1,67 @@
/*
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.guis.bnds; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*;
import gplx.gfui.ipts.*; import gplx.xowa.guis.cmds.*;
interface Xog_bnd_wkr {
void Bind_ipt_to_box(String box, String ipt);
}
class Xog_bnd_wkr__null implements Xog_bnd_wkr {
public void Bind_ipt_to_box(String box, String ipt) {}
}
class Xog_bnd_temp implements Gfo_invk {
private Xoae_app app;
private final Ordered_hash regy = Ordered_hash_.New();
private final Xog_bnd_wkr bnd_wkr = new Xog_bnd_wkr__null();
private Xog_bnd_box[] boxs = Xog_bnd_box_.Ary();
public void Init_by_app(Xoae_app app) {
this.app = app;
Init_itm(Xog_cmd_itm_.Key_gui_browser_tabs_new_dflt__at_dflt__focus_y , Xog_bnd_box_.Tid_browser , "mod.c+key.t");
}
private void Init_itm(String cmd, int box, String... ipts) {
int ipts_len = ipts.length;
for (int i = 0; i < ipts_len; i++) {
String ipt_str = ipts[i];
Init_itm(cmd, i, box, IptArg_.parse_or_none_(ipt_str));
}
}
// private void Init_itm(String cmd, int idx, int box, String ipt) {Init_itm(cmd, idx, box, IptArg_.parse_or_none_(ipt));}
private void Init_itm(String cmd, int idx, int box, IptArg ipt) {
String key = cmd + "-" + Int_.To_str(idx + List_adp_.Base1); // EX: xowa.widgets.url.focus-1 xowa.widgets.url.focus-2
Xog_bnd_itm itm = new Xog_bnd_itm(key, Bool_.Y, cmd, box, ipt);
boxs[box].Add(itm);
regy.Add(itm.Key(), itm);
app.Cfg().Bind_many_app(this, cmd);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
Xog_bnd_cfg_itm itm = Xog_bnd_cfg_itm.Parse(m.ReadStr("v"));
bnd_wkr.Bind_ipt_to_box(itm.Box(), itm.Ipt());
return this;
}
}
class Xog_bnd_cfg_itm {
public Xog_bnd_cfg_itm(String box, String ipt) {
this.box = box;
this.ipt = ipt;
}
public String Box() {return box;} private final String box;
public String Ipt() {return ipt;} private final String ipt;
public static Xog_bnd_cfg_itm Parse(String s) {
String[] parts = String_.Split(s, "|");
return new Xog_bnd_cfg_itm(parts[0], parts[1]);
}
}

View File

@ -21,16 +21,13 @@ import gplx.xowa.parsers.xndes.*;
public class Xoh_html_mgr implements Gfo_invk {
public Xoh_html_mgr(Xoae_app app) {}
public void Init_by_app(Xoae_app app) {
tidy_mgr.Init_by_app(app);
page_mgr.Init_by_app(app);
}
public Xoh_page_mgr Page_mgr() {return page_mgr;} private final Xoh_page_mgr page_mgr = new Xoh_page_mgr();
public Xoa_tidy_mgr Tidy_mgr() {return tidy_mgr;} private final Xoa_tidy_mgr tidy_mgr = new Xoa_tidy_mgr();
public Xoh_skin_mgr Skin_mgr() {return skin_mgr;} private final Xoh_skin_mgr skin_mgr = new Xoh_skin_mgr();
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_page)) return page_mgr;
else if (ctx.Match(k, Invk_tidy)) return tidy_mgr;
else if (ctx.Match(k, Invk_skins)) return skin_mgr;
else return Gfo_invk_.Rv_unhandled;
} private static final String Invk_page = "page", Invk_tidy = "tidy", Invk_skins = "skins";
} private static final String Invk_page = "page", Invk_skins = "skins";
}

View File

@ -1,36 +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.htmls; import gplx.*; import gplx.xowa.*;
import gplx.core.primitives.*;
import gplx.xowa.wikis.domains.*;
public class Xoh_imgs_mgr implements Gfo_invk {
public Xoh_imgs_mgr(Xow_html_mgr html_mgr) {wiki_is_default = html_mgr.Wiki().Domain_tid() == Xow_domain_tid_.Tid__home;} private boolean wiki_is_default;
public Bool_obj_ref Alt_in_caption() {return alt_in_caption;} Bool_obj_ref alt_in_caption = Bool_obj_ref.y_();
public Bool_obj_ref Alt_defaults_to_caption() {return alt_defaults_to_caption;} Bool_obj_ref alt_defaults_to_caption = Bool_obj_ref.y_();
public void Copy_cfg(Xoh_imgs_mgr copy) {this.alt_in_caption = copy.alt_in_caption;}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_alt_in_caption)) return Yn.To_str(alt_in_caption.Val());
else if (ctx.Match(k, Invk_alt_in_caption_)) alt_in_caption = Modify(wiki_is_default, alt_in_caption, m.ReadYn("v"));
else if (ctx.Match(k, Invk_alt_defaults_to_caption)) return Yn.To_str(alt_defaults_to_caption.Val());
else if (ctx.Match(k, Invk_alt_defaults_to_caption_)) alt_defaults_to_caption = Modify(wiki_is_default, alt_defaults_to_caption, m.ReadYn("v"));
else return Gfo_invk_.Rv_unhandled;
return this;
}
public static final String Invk_alt_in_caption = "alt_in_caption", Invk_alt_in_caption_ = "alt_in_caption_", Invk_alt_defaults_to_caption = "alt_defaults_to_caption", Invk_alt_defaults_to_caption_ = "alt_defaults_to_caption_";
private static Bool_obj_ref Modify(boolean orig, Bool_obj_ref cur, boolean v) {return orig ? cur.Val_(v) : Bool_obj_ref.new_(v);}
}

View File

@ -36,21 +36,18 @@ public class Xoh_page_mgr implements Gfo_invk {
public Bry_fmt Content_code_fmt() {return content_code_fmt;} private final Bry_fmt content_code_fmt = Bry_fmt.Auto("<pre>~{page_text}</pre>");
public Xoh_subpages_bldr Subpages_bldr() {return subpages_bldr;} private final Xoh_subpages_bldr subpages_bldr = new Xoh_subpages_bldr();
public void Init_by_app(Xoa_app app) {
app.Cfg().Bind_many_app(this, Cfg__font_enabled, Cfg__font_name, Cfg__font_size, Cfg__font_format, Cfg__custom_script);
app.Cfg().Bind_many_app(this, Cfg__font_enabled, Cfg__font_name, Cfg__font_size, Cfg__font_format, Cfg__custom_script, Cfg__content_code_fmt);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_content_code_fmt)) return String_.new_u8(content_code_fmt.Fmt());
else if (ctx.Match(k, Invk_content_code_fmt_)) content_code_fmt.Fmt_(m.ReadBry("v"));
else if (ctx.Match(k, Cfg__font_enabled)) font_enabled = m.ReadYn("v");
if (ctx.Match(k, Cfg__font_enabled)) font_enabled = m.ReadYn("v");
else if (ctx.Match(k, Cfg__font_name)) {font_name = m.ReadStr("v"); Font_css_bry_();}
else if (ctx.Match(k, Cfg__font_size)) {font_size = m.ReadFloat("v"); Font_css_bry_();}
else if (ctx.Match(k, Cfg__font_format)) {font_css_fmt.Fmt_(m.ReadBry("v")); Font_css_bry_();}
else if (ctx.Match(k, Cfg__custom_script)) custom_script = m.ReadBry("v");
else if (ctx.Match(k, Cfg__content_code_fmt)) content_code_fmt.Fmt_(m.ReadBry("v"));
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String Invk_content_code_fmt = "content_code_fmt", Invk_content_code_fmt_ = "content_code_fmt_";
public static final String
Cfg__font_enabled = "xowa.html.css.font.enabled"
@ -60,6 +57,7 @@ public class Xoh_page_mgr implements Gfo_invk {
Cfg__font_name = "xowa.html.css.font.name"
, Cfg__font_format = "xowa.html.css.font.format"
, Cfg__custom_script = "xowa.html.css.custom.script"
, Cfg__content_code_fmt = "xowa.html.wiki.content_code_fmt"
;
public static final float Font_size_default = 16;
}

View File

@ -30,6 +30,7 @@ public class Xoh_page_wtr_mgr implements Gfo_invk {
public boolean Html_capable() {return html_capable;} public Xoh_page_wtr_mgr Html_capable_(boolean v) {html_capable = v; return this;} private boolean html_capable;
public byte[] Css_common_bry() {return css_common_bry;} private byte[] css_common_bry;
public byte[] Css_wiki_bry() {return css_wiki_bry;} private byte[] css_wiki_bry;
public boolean Scripting_enabled() {return scripting_enabled;} private boolean scripting_enabled;
public Bry_fmtr Page_read_fmtr() {return page_read_fmtr;} private Bry_fmtr page_read_fmtr = Bry_fmtr.new_("", Fmtr_keys);
public Bry_fmtr Page_edit_fmtr() {return page_edit_fmtr;} private Bry_fmtr page_edit_fmtr = Bry_fmtr.new_("", Fmtr_keys);
public Bry_fmtr Page_html_fmtr() {return page_html_fmtr;} private Bry_fmtr page_html_fmtr = Bry_fmtr.new_("", Fmtr_keys);
@ -39,6 +40,9 @@ public class Xoh_page_wtr_mgr implements Gfo_invk {
this.css_wiki_bry = css_wiki_url.To_http_file_bry();
}
public void Init_(boolean v) {init = v;} private boolean init = true;
public void Init_by_wiki(Xow_wiki wiki) {
wiki.App().Cfg().Bind_many_wiki(this, wiki, Cfg__scripting_enabled);
}
public byte[] Gen(Xoae_page page, byte output_tid) {
Xoh_page_wtr_wkr wtr = Wkr(output_tid);
Xowe_wiki wiki = page.Wikie();
@ -64,6 +68,7 @@ public class Xoh_page_wtr_mgr implements Gfo_invk {
else if (ctx.Match(k, Invk_page_edit_)) page_edit_fmtr.Fmt_(m.ReadBry("v"));
else if (ctx.Match(k, Invk_page_html_)) page_html_fmtr.Fmt_(m.ReadBry("v"));
else if (ctx.Match(k, Invk_xowa_div_edit_rename_)) div_edit_rename_fmtr.Fmt_(m.ReadBry("v"));
else if (ctx.Match(k, Cfg__scripting_enabled)) scripting_enabled = m.ReadYn("v");
else return Gfo_invk_.Rv_unhandled;
return this;
}
@ -88,6 +93,7 @@ public class Xoh_page_wtr_mgr implements Gfo_invk {
, "portal_div_admin", "portal_div_wikis", "portal_sidebar"
, "edit_div_rename", "edit_div_preview", "js_edit_toolbar"
};
private static final String Cfg__scripting_enabled = "xowa.addon.scripting.enabled";
}
/*
NOTE_1:xowa_anchor_button

View File

@ -28,6 +28,7 @@ public class Xoh_page_wtr_wkr {
private final Bry_bfr tmp_bfr = Bry_bfr_.Reset(255);
private final Xoh_page_wtr_mgr mgr; private final byte page_mode;
private final Wdata_xwiki_link_wtr wdata_lang_wtr = new Wdata_xwiki_link_wtr(); // In other languages
private final gplx.xowa.addons.apps.scripts.Xoscript_mgr scripting_mgr = new gplx.xowa.addons.apps.scripts.Xoscript_mgr();
private Xoae_app app; private Xowe_wiki wiki; private Xoae_page page; private byte[] root_dir_bry;
public Xoh_page_wtr_wkr(Xoh_page_wtr_mgr mgr, byte page_mode) {this.mgr = mgr; this.page_mode = page_mode;}
public Xoh_page_wtr_wkr Ctgs_enabled_(boolean v) {ctgs_enabled = v; return this;} private boolean ctgs_enabled = true;
@ -57,7 +58,7 @@ public class Xoh_page_wtr_wkr {
hctx = Xoh_wtr_ctx.Basic;
Write_body(page_bfr, ctx, hctx, page);
Write_page_by_tid(ctx, hctx, view_mode, rv, fmtr, page_bfr.To_bry_and_rls());
new gplx.xowa.addons.apps.scripts.Xoscript_mgr().Write(rv, wiki, page);
scripting_mgr.Write(rv, wiki, page);
if (page_mode == Xopg_page_.Tid_html) // if html, write page again, but wrap it in html skin this time
Write_page_by_tid(ctx, hctx, page_mode, rv, mgr.Page_html_fmtr(), Gfh_utl.Escape_html_as_bry(rv.To_bry_and_clear()));
wdata_lang_wtr.Page_(null);
@ -107,7 +108,7 @@ public class Xoh_page_wtr_wkr {
, portal_mgr.Div_ns_bry(wiki.Utl__bfr_mkr(), page_ttl, wiki.Ns_mgr())
, portal_mgr.Div_view_bry(wiki.Utl__bfr_mkr(), html_gen_tid, page.Html_data().Xtn_search_text())
, portal_mgr.Div_logo_bry(), portal_mgr.Div_home_bry(), new Xopg_xtn_skin_fmtr_arg(page, Xopg_xtn_skin_itm_tid.Tid_sidebar)
, portal_mgr.Div_sync_bry(tmp_bfr, app.Api_root().Addon().Bldr().Sync().Manual_enabled(), wiki, page)
, portal_mgr.Div_sync_bry(tmp_bfr, wiki.Page_mgr().Sync_mgr().Manual_enabled(), wiki, page)
, portal_mgr.Div_wikis_bry(wiki.Utl__bfr_mkr())
, portal_mgr.Sidebar_mgr().Html_bry()
, mgr.Edit_rename_div_bry(page_ttl), page.Html_data().Edit_preview_w_dbg(), js_edit_toolbar_bry
@ -200,8 +201,7 @@ public class Xoh_page_wtr_wkr {
) {
if (app.Mode().Tid_is_gui()) app.Usr_dlg().Prog_many("", "", "loading categories: count=~{0}", ctgs_len);
Xoctg_pagebox_itm[] pagebox_itms = wiki.Ctg__pagebox_wtr().Get_catlinks_by_page(wiki, page);
boolean hidden_enabled = wiki.App().Api_root().Addon().Wikis__ctgs__hidden_enabled();
wiki.Ctg__pagebox_wtr().Write_pagebox(hidden_enabled, bfr, wiki, page, pagebox_itms);
wiki.Ctg__pagebox_wtr().Write_pagebox(bfr, wiki, page, pagebox_itms);
}
// translate if variants are enabled

View File

@ -32,7 +32,6 @@ public class Xow_html_mgr implements Gfo_invk {
page_wtr_mgr = new Xoh_page_wtr_mgr(app.Gui_mgr().Kit().Tid() != Gfui_kit_.Swing_tid); // reverse logic to handle swt,drd but not mem
img_xowa_protocol = fsys_lnx_encoder.Encode_to_file_protocol(app.Fsys_mgr().Bin_xowa_file_dir().GenSubFil_nest("app.general", "xowa_exec.png"));
portal_mgr = new Xow_portal_mgr(wiki);
imgs_mgr = new Xoh_imgs_mgr(this);
module_mgr = new Xow_module_mgr(wiki);
this.js_cleaner = new Xoh_js_cleaner(app);
}
@ -40,6 +39,8 @@ public class Xow_html_mgr implements Gfo_invk {
html_wtr.Init_by_wiki(wiki);
module_mgr.Init_by_wiki(wiki);
tidy_mgr.Init_by_wiki(wiki.Appe());
portal_mgr.Init_by_wiki(wiki);
page_wtr_mgr.Init_by_wiki(wiki);
}
public void Init_by_lang(Xol_lang_itm lang) {
portal_mgr.Init_by_lang(lang);
@ -56,14 +57,11 @@ public class Xow_html_mgr implements Gfo_invk {
public int Img_thumb_width() {return img_thumb_width;} private int img_thumb_width = 220;
public byte[] Img_xowa_protocol() {return img_xowa_protocol;} private byte[] img_xowa_protocol;
public boolean Img_suppress_missing_src() {return img_suppress_missing_src;} public Xow_html_mgr Img_suppress_missing_src_(boolean v) {img_suppress_missing_src = v; return this;} private boolean img_suppress_missing_src = true;
public Xoh_imgs_mgr Imgs_mgr() {return imgs_mgr;} private Xoh_imgs_mgr imgs_mgr;
public void Copy_cfg(Xow_html_mgr html_mgr) {imgs_mgr.Copy_cfg(html_mgr.Imgs_mgr());}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_article)) return page_wtr_mgr;
else if (ctx.Match(k, Invk_portal)) return portal_mgr;
else if (ctx.Match(k, Invk_imgs)) return imgs_mgr;
else if (ctx.Match(k, Invk_modules)) return module_mgr;
else return Gfo_invk_.Rv_unhandled;
}
public static final String Invk_article = "article", Invk_portal = "portal", Invk_imgs = "imgs", Invk_modules = "modules";
public static final String Invk_article = "article", Invk_portal = "portal", Invk_modules = "modules";
}

View File

@ -67,8 +67,7 @@ public class Xow_hdump_mgr__load implements Gfo_invk {
Xoctg_pagebox_itm[] pagebox_itms = wiki.Ctg__pagebox_wtr().Get_catlinks_by_page(wiki, hpg);
if (pagebox_itms.length > 0) {
tmp_bfr.Add(src);
boolean hidden_enabled = wiki.App().Api_root() == null ? false : wiki.App().Api_root().Addon().Wikis__ctgs__hidden_enabled(); // HACK: handle drd which doesn't have api
wiki.Ctg__pagebox_wtr().Write_pagebox(hidden_enabled, tmp_bfr, wiki, hpg, pagebox_itms);
wiki.Ctg__pagebox_wtr().Write_pagebox(tmp_bfr, wiki, hpg, pagebox_itms);
src = tmp_bfr.To_bry_and_clear();
}

View File

@ -41,8 +41,7 @@ public class Xob_hdump_bldr implements Gfo_invk {
this.stat_tbl = new Xoh_stat_tbl(make_conn); this.stat_itm = hdump_mgr.Hzip_mgr().Hctx().Hzip__stat();
this.toc_label = wiki.Msg_mgr().Val_by_id(gplx.xowa.langs.msgs.Xol_msg_itm_.Id_toc);
Xoapi_import import_cfg = wiki.Appe().Api_root().Bldr().Wiki().Import();
if (zip_tid == Byte_.Max_value_127) zip_tid = import_cfg.Zip_tid_html();
if (zip_tid == Byte_.Max_value_127) zip_tid = Xobldr_cfg.Zip_mode__html(wiki.App());
hdump_mgr.Init_by_db(zip_tid, hzip_enabled, hzip_b256);
return true;
}

View File

@ -42,6 +42,7 @@ public class Xoh_html_wtr {
public void Init_by_wiki(Xowe_wiki wiki) {
cfg.Toc__show_(Bool_.Y).Lnki__title_(true).Lnki__visited_y_().Lnki__id_(Bool_.Y); // NOTE: set during Init_by_wiki, b/c all tests assume these are false
ref_wtr.Init_by_wiki(wiki);
lnki_wtr.Init_by_wiki(wiki);
}
public void Init_by_page(Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xoae_page page) {
this.page = page;

View File

@ -1,58 +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.htmls.core.htmls.tidy; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.htmls.*;
import gplx.core.envs.*;
import gplx.langs.htmls.*;
import gplx.xowa.apps.fsys.*;
public class Xoa_tidy_mgr implements Gfo_evt_itm {
public Xoa_tidy_mgr() {this.evt_mgr = new Gfo_evt_mgr(this);}
public Gfo_evt_mgr Evt_mgr() {return evt_mgr;} private final Gfo_evt_mgr evt_mgr;
public Xoh_tidy_wkr_tidy Wkr_tidy() {return wkr_tidy;} private Xoh_tidy_wkr_tidy wkr_tidy = new Xoh_tidy_wkr_tidy(); // NOTE: app-level; not thread-safe; needed b/c of Options and exe/args DATE:2016-07-12
public void Init_by_app(Xoae_app app) {
wkr_tidy.Init_by_app(app);
Xoa_fsys_eval cmd_eval = app.Url_cmd_eval();
Process_adp.ini_(this, app.Usr_dlg(), wkr_tidy, cmd_eval, Process_adp.Run_mode_sync_timeout, 1 * 60, "~{<>bin_plat_dir<>}tidy" + Op_sys.Cur().Fsys_dir_spr_str() + "tidy", Xoh_tidy_wkr_tidy.Args_fmt, "source", "target");
}
public boolean Enabled() {return enabled;} private boolean enabled = true;
public void Enabled_toggle() {Enabled_(!enabled);}
public byte Wkr_tid() {return wkr_tid;} private byte wkr_tid = Xoh_tidy_wkr_.Tid_jtidy;
private void Enabled_(boolean v) {
this.enabled = v;
Gfo_evt_mgr_.Pub_val(this, Evt__enabled_changed, v);
}
public void Wkr_tid_(byte v) {
this.wkr_tid = v;
Gfo_evt_mgr_.Pub_val(this, Evt__engine_changed, v);
}
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_enabled_toggle)) Enabled_(!enabled);
else if (ctx.Match(k, Invk_engine_type)) return Xoh_tidy_wkr_.Xto_key(wkr_tid);
else if (ctx.Match(k, Invk_engine_type_)) Wkr_tid_(Xoh_tidy_wkr_.Xto_tid(m.ReadStr("v")));
else if (ctx.Match(k, Invk_engine_type_list)) return Xoh_tidy_wkr_.Options__list;
else if (ctx.Match(k, Invk_lib)) return wkr_tidy;
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String
Invk_enabled = "enabled", Invk_enabled_ = "enabled_", Invk_enabled_toggle = "enabled_toggle", Invk_lib = "lib"
, Invk_engine_type = "engine_type", Invk_engine_type_ = "engine_type_", Invk_engine_type_list = "engine_type_list"
;
public static final String Evt__enabled_changed = "enabled_changed", Evt__engine_changed = "engine_changed";
}

View File

@ -18,23 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.htmls.core.htmls.tidy; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.htmls.*;
public class Xoh_tidy_wkr_ {
public static final byte Tid_null = 0, Tid_tidy = 1, Tid_jtidy = 2;
public static final String Key_null = "null", Key_tidy = "tidy", Key_jtidy = "jtidy";
public static final Xoh_tidy_wkr Wkr_null = new Xoh_tidy_wkr_null();
public static String Xto_key(byte v) {
switch (v) {
case Tid_null: return Key_null;
case Tid_tidy: return Key_tidy;
case Tid_jtidy: return Key_jtidy;
default: throw Err_.new_unimplemented();
}
}
public static byte Xto_tid(String s) {
if (String_.Eq(s, Key_tidy)) return Tid_tidy;
else if (String_.Eq(s, Key_jtidy)) return Tid_jtidy;
else if (String_.Eq(s, Key_null)) return Tid_null;
else throw Err_.new_unimplemented();
}
public static Keyval[] Options__list = Keyval_.Ary(Keyval_.new_(Key_tidy), Keyval_.new_(Key_jtidy));
}
class Xoh_tidy_wkr_null implements Xoh_tidy_wkr {
public byte Tid() {return Xoh_tidy_wkr_.Tid_null;}

View File

@ -16,27 +16,24 @@ 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.htmls.core.htmls.tidy; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.htmls.*;
import gplx.core.envs.*;
import gplx.langs.htmls.*;
public class Xow_tidy_mgr implements Gfo_evt_itm, Xow_tidy_mgr_interface {
private Xoae_app app; private Xoa_tidy_mgr tidy_mgr;
private Xoae_app app; private Xoh_tidy_wkr_tidy tidy_cmd = new Xoh_tidy_wkr_tidy(); // NOTE: app-level; not thread-safe; needed b/c of Options and exe/args DATE:2016-07-12
private boolean enabled = true; private Xoh_tidy_wkr wkr = Xoh_tidy_wkr_.Wkr_null; // TEST: set default wkr to null
public Xow_tidy_mgr() {this.evt_mgr = new Gfo_evt_mgr(this);}
public Gfo_evt_mgr Evt_mgr() {return evt_mgr;} private final Gfo_evt_mgr evt_mgr;
private void Wkr_(byte tid) {
switch (tid) {
case Xoh_tidy_wkr_.Tid_tidy: wkr = tidy_mgr.Wkr_tidy(); break;
case Xoh_tidy_wkr_.Tid_jtidy: wkr = new Xoh_tidy_wkr_jtidy(); break;
case Xoh_tidy_wkr_.Tid_null: wkr = Xoh_tidy_wkr_.Wkr_null; break;
default: throw Err_.new_unhandled_default(tid);
}
private void Engine_(String v) {
if (String_.Eq(v, "tidy")) wkr = new Xoh_tidy_wkr_tidy(); // NOTE: app-level; not thread-safe; needed b/c of Options and exe/args DATE:2016-07-12
else if (String_.Eq(v, "jtidy")) wkr = new Xoh_tidy_wkr_jtidy();
else throw Err_.new_unhandled_default(v);
wkr.Init_by_app(app);
}
public void Init_by_wiki(Xoae_app app) {
this.app = app;
this.tidy_mgr = app.Html_mgr().Tidy_mgr();
Gfo_evt_mgr_.Sub_same_many(tidy_mgr, this, Xoa_tidy_mgr.Evt__enabled_changed, Xoa_tidy_mgr.Evt__engine_changed);
this.enabled = tidy_mgr.Enabled();
this.Wkr_(tidy_mgr.Wkr_tid());
tidy_cmd.Init_by_app(app);
Process_adp.ini_(this, app.Usr_dlg(), tidy_cmd, app.Url_cmd_eval(), Process_adp.Run_mode_sync_timeout, 1 * 60, "~{<>bin_plat_dir<>}tidy" + Op_sys.Cur().Fsys_dir_spr_str() + "tidy", Xoh_tidy_wkr_tidy.Args_fmt, "source", "target");
app.Cfg().Bind_many_app(this, Cfg__enabled, Cfg__engine, Cfg__cmd);
}
public void Exec_tidy(Bry_bfr bfr, boolean indent, byte[] page_url) {
if (!enabled) return;
@ -47,8 +44,9 @@ public class Xow_tidy_mgr implements Gfo_evt_itm, Xow_tidy_mgr_interface {
Tidy_unwrap(bfr);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Xoa_tidy_mgr.Evt__enabled_changed)) this.enabled = m.ReadBool("v");
else if (ctx.Match(k, Xoa_tidy_mgr.Evt__engine_changed)) this.Wkr_(m.ReadByte("v"));
if (ctx.Match(k, Cfg__enabled)) this.enabled = m.ReadYn("v");
else if (ctx.Match(k, Cfg__engine)) Engine_(m.ReadStr("v"));
else if (ctx.Match(k, Cfg__cmd)) gplx.xowa.apps.progs.Xoa_prog_mgr.Init_cmd(m.ReadStr("v"), tidy_cmd);
else return Gfo_invk_.Rv_unhandled;
return this;
}
@ -77,4 +75,9 @@ public class Xow_tidy_mgr implements Gfo_evt_itm, Xow_tidy_mgr_interface {
( "</body>"
+ "</html>"
);
private static final String
Cfg__enabled = "xowa.html.tidy.enabled"
, Cfg__engine = "xowa.html.tidy.engine"
, Cfg__cmd = "xowa.html.tidy.cmd"
;
}

View File

@ -1,22 +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.htmls.core.wkrs.hdrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*;
import gplx.xowa.parsers.*; import gplx.xowa.parsers.tmpls.*; import gplx.xowa.parsers.hdrs.*;
public class Xoh_section_editable_ {
public static final String Cfg__section_editing__enabled = "xowa.edit.section_edit.enabled";
}

View File

@ -29,6 +29,9 @@ public class Xoh_file_mgr {
this.wiki = wiki; this.file_wtr = new Xoh_file_wtr__basic(wiki, html_mgr, html_wtr);
}
public Xoh_file_wtr__basic File_wtr() {return file_wtr;} private final Xoh_file_wtr__basic file_wtr;
public void Init_by_wiki(Xowe_wiki wiki) {
file_wtr.Init_by_wiki(wiki);
}
public void Init_by_page(Xoh_wtr_ctx hctx, Xoae_page page) {file_wtr.Init_by_page(hctx, page);}
public void Write_or_queue(Bry_bfr bfr, Xoae_page page, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki) {Write_or_queue(bfr, page, ctx, hctx, src, lnki, file_wtr.Bld_alt(Bool_.N, ctx, Xoh_wtr_ctx.Alt, src, lnki));}
public void Write_or_queue(Bry_bfr bfr, Xoae_page page, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki, byte[] alt_text) {

View File

@ -21,23 +21,26 @@ import gplx.langs.htmls.*; import gplx.langs.htmls.encoders.*; import gplx.xowa.
import gplx.xowa.langs.*; import gplx.xowa.langs.msgs.*;
import gplx.xowa.wikis.nss.*; import gplx.xowa.files.*;
import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.*; import gplx.xowa.parsers.tmpls.*;
public class Xoh_file_wtr__basic {
public class Xoh_file_wtr__basic implements Gfo_invk {
private final Xowe_wiki wiki; private final Xow_html_mgr html_mgr; private final Xoh_html_wtr html_wtr;
private final Xoh_file_fmtr__basic fmtr__basic = new Xoh_file_fmtr__basic(), fmtr__hdump = new Xoh_file_fmtr__hdump();
private final Xoh_lnki_text_fmtr alt_fmtr, caption_fmtr;
private final Xop_link_parser tmp_link_parser = new Xop_link_parser(); private Xoa_url tmp_url = Xoa_url.blank();
private final Bry_bfr tmp_bfr = Bry_bfr_.Reset(32);
private Xoae_page page; private boolean cfg_alt_defaults_to_caption; private byte[] msg_file_enlarge;
private Xoae_page page; private byte[] msg_file_enlarge;
private Xoh_file_fmtr__basic html_fmtr;
private boolean alt_in_caption = true, alt_defaults_to_caption = true;
public Xoh_file_wtr__basic(Xowe_wiki wiki, Xow_html_mgr html_mgr, Xoh_html_wtr html_wtr) {
this.wiki = wiki; this.html_mgr = html_mgr; this.html_wtr = html_wtr;
this.alt_fmtr = new Xoh_lnki_text_fmtr(wiki.Utl__bfr_mkr(), html_wtr);
this.caption_fmtr = new Xoh_lnki_text_fmtr(wiki.Utl__bfr_mkr(), html_wtr);
this.html_fmtr = fmtr__basic;
}
public void Init_by_wiki(Xowe_wiki wiki) {
wiki.App().Cfg().Bind_many_wiki(this, wiki, Cfg__alt_in_caption, Cfg__alt_defaults_to_caption);
}
public void Init_by_page(Xoh_wtr_ctx hctx, Xoae_page page) {
this.page = page;
this.cfg_alt_defaults_to_caption = wiki.Appe().Usere().Wiki().Html_mgr().Imgs_mgr().Alt_defaults_to_caption().Val();
this.html_fmtr = hctx.Mode_is_hdump() ? fmtr__hdump : fmtr__basic;
if (msg_file_enlarge == null) this.msg_file_enlarge = wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_file_enlarge);
}
@ -169,7 +172,7 @@ public class Xoh_file_wtr__basic {
if (bfr.Len() > 0) bfr.Add_byte_nl();
// write image_div
byte[] alt_html = wiki.Html_mgr().Imgs_mgr().Alt_in_caption().Val() ? Bld_alt(Bool_.Y, ctx, hctx, src, lnki) : Bry_.Empty;
byte[] alt_html = alt_in_caption ? Bld_alt(Bool_.Y, ctx, hctx, src, lnki) : Bry_.Empty;
img_fmtr.Add_full_img(tmp_bfr, hctx, page, src, xfer_itm, uid, lnki_href, Bool_.N, Xoh_lnki_consts.Tid_a_cls_image, Xoh_lnki_consts.Tid_a_rel_none, anch_ttl
, Xoh_file_fmtr__basic.Escape_xowa_title(lnki_ttl), xfer_itm.Html_w(), xfer_itm.Html_h(), img_view_src, alt
, xfer_itm.File_exists() ? Xoh_img_cls_.Tid__thumbimage : Xoh_img_cls_.Tid__none
@ -180,7 +183,7 @@ public class Xoh_file_wtr__basic {
);
}
else { // is full
if ( cfg_alt_defaults_to_caption
if ( alt_defaults_to_caption
&& Bry_.Len_eq_0(alt) // NOTE: if no alt, always use caption for alt; DATE:2013-07-22
&& !lnki.Alt_exists() // unless blank alt exists; EX: [[File:A.png|a|alt=]] should have alt of "", not "a"
) {
@ -261,6 +264,15 @@ public class Xoh_file_wtr__basic {
, width - 2, max_width); // NOTE: -2 is fudge factor else play btn will jut out over video thumb; see Earth and ISS video
}
private int Get_play_btn_width(int w) {return w > 0 ? w : html_mgr.Img_thumb_width();} // if no width set width to default img width
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Cfg__alt_in_caption)) alt_in_caption = m.ReadYn("v");
else if (ctx.Match(k, Cfg__alt_defaults_to_caption)) alt_defaults_to_caption = m.ReadYn("v");
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String
Cfg__alt_in_caption = "xowa.html.wiki.alt_in_caption"
, Cfg__alt_defaults_to_caption = "xowa.html.wiki.alt_defaults_to_caption";
private static final byte[]
Div_center_bgn = Bry_.new_a7("<div class=\"center\">")

View File

@ -35,6 +35,9 @@ public class Xoh_lnki_wtr {
file_wtr = new Xoh_file_mgr(wiki, html_mgr, html_wtr);
}
public Xoh_file_mgr File_wtr() {return file_wtr;} private Xoh_file_mgr file_wtr;
public void Init_by_wiki(Xowe_wiki wiki) {
file_wtr.Init_by_wiki(wiki);
}
public void Init_by_page(Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xoae_page page) {
this.ctx = ctx; this.page = page; // NOTE: must set ctx for file.v2; DATE:2014-06-22
this.wiki = ctx.Wiki();

View File

@ -21,11 +21,11 @@ public class Xoh_head_itm__collapsible extends Xoh_head_itm__base {
@Override public int Flags() {return Flag__js_head_global;}
@Override public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_head_wtr wtr) {
wtr.Write_js_global_ini_atr_val(Key_enabled , true);
wtr.Write_js_global_ini_atr_val(Key_collapsed , app.Api_root().Html().Modules().Collapsible().Collapsed());
wtr.Write_js_global_ini_atr_val(Key_collapsed , wiki.Html_mgr().Head_mgr().Collapsible__collapsible());
wtr.Write_js_global_ini_atr_msg(wiki , Key_collapse);
wtr.Write_js_global_ini_atr_msg(wiki , Key_expand);
}
private static final byte[]
private static final byte[]
Key_enabled = Bry_.new_a7("collapsible-enabled")
, Key_collapsed = Bry_.new_a7("collapsible-collapsed")
, Key_collapse = Bry_.new_a7("collapsible-collapse")

View File

@ -21,7 +21,7 @@ public class Xoh_head_itm__css extends Xoh_head_itm__base {
@Override public byte[] Key() {return Xoh_head_itm_.Key__css;}
@Override public int Flags() {return Flag__css_text;}
@Override public void Write_css_text(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_head_wtr wtr) {
wtr.Write_css_style_itm(app.Ctg_mgr().Missing_ctg_cls_css());
wtr.Write_css_style_itm(wiki.Ctg__catpage_mgr().Missing_ctg_cls_css());
app.Html_mgr().Page_mgr().Write_css(wtr);
}
}

View File

@ -21,11 +21,11 @@ public class Xoh_head_itm__navframe extends Xoh_head_itm__base {
@Override public int Flags() {return Flag__js_head_global;}
@Override public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_head_wtr wtr) {
wtr.Write_js_global_ini_atr_val(Key_enabled , true);
wtr.Write_js_global_ini_atr_val(Key_collapsed , app.Api_root().Html().Modules().Navframe().Collapsed() || wiki.Html_mgr().Head_mgr().Itm__navframe().Enabled_n());
wtr.Write_js_global_ini_atr_val(Key_collapsed , wiki.Html_mgr().Head_mgr().Collapsible__navframe() || wiki.Html_mgr().Head_mgr().Itm__navframe().Enabled_n());
wtr.Write_js_global_ini_atr_msg(wiki , Key_show);
wtr.Write_js_global_ini_atr_msg(wiki , Key_hide);
}
private static final byte[]
private static final byte[]
Key_enabled = Bry_.new_a7("navframe-enabled")
, Key_collapsed = Bry_.new_a7("navframe-collapsed")
, Key_show = Bry_.new_a7("show")

View File

@ -22,7 +22,7 @@ public class Xoh_head_itm__toc extends Xoh_head_itm__base {
@Override public int Flags() {return Flag__js_head_global | Flag__js_tail_script;}
@Override public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_head_wtr wtr) {
wtr.Write_js_global_ini_atr_val(Key_exists , true);
wtr.Write_js_global_ini_atr_val(Key_collapsed , app.Api_root().Html().Modules().Collapsible().Collapsed() ? Val_collapsed_y : Val_collapsed_n);
wtr.Write_js_global_ini_atr_val(Key_collapsed , wiki.Html_mgr().Head_mgr().Collapsible__toc() ? Val_collapsed_y : Val_collapsed_n);
wtr.Write_js_global_ini_atr_msg(wiki , Key_showtoc);
wtr.Write_js_global_ini_atr_msg(wiki , Key_hidetoc);
}
@ -31,13 +31,13 @@ public class Xoh_head_itm__toc extends Xoh_head_itm__base {
// wtr.Write_js_line(Xoh_head_itm__popups.Mw_init);
// wtr.Write_js_tail_load_lib(app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "modules", "mw.toc", "mw.toc.js"));
}
private static final byte[]
private static final byte[]
Key_exists = Bry_.new_a7("toc-enabled")
, Key_collapsed = Bry_.new_a7("mw_hidetoc")
, Val_collapsed_y = Bry_.new_a7("1")
, Val_collapsed_n = Bry_.new_a7("0")
;
public static final byte[]
public static final byte[]
Key_showtoc = Bry_.new_a7("showtoc")
, Key_hidetoc = Bry_.new_a7("hidetoc")
;

View File

@ -63,7 +63,7 @@ public class Xoh_head_mgr implements gplx.core.brys.Bfr_arg {
if (page.Wtxt().Toc().Enabled()) itm__toc.Enabled_y_();
if (wiki.Html_mgr().Head_mgr().Itm__top_icon().Enabled_y()) itm__top_icon.Enabled_y_();
if (wiki.Html_mgr().Head_mgr().Itm__title_rewrite().Enabled_y()) itm__title_rewrite.Enabled_y_();
if (app.Gui_mgr().Search_cfg().Enabled()) itm__search_suggest.Enabled_y_();
if (app.Addon_mgr().Itms__search__htmlbar().Enabled()) itm__search_suggest.Enabled_y_();
itm__css.Enabled_y_();
itm__globals.Enabled_y_(); // for now, always mark this and rest as exists; DATE:2014-06-09
itm__collapsible.Enabled_y_();

View File

@ -125,7 +125,7 @@ public class Xoh_js_cbk implements Gfo_invk {
Xowe_wiki wiki = html_itm.Owner_tab().Wiki();
byte[] search_str = Bry_.new_u8((String)m.ReadValAt(0));
byte[] cbk_func = Bry_.new_u8((String)m.ReadValAt(1));
app.Gui_mgr().Search_cfg().Search(wiki, search_str, cbk_func);
app.Addon_mgr().Itms__search__htmlbar().Search(wiki, search_str, cbk_func);
return "";
}
private String[] Wikidata_get_label(GfoMsg m) {

View File

@ -22,31 +22,45 @@ import gplx.xowa.guis.*; import gplx.xowa.addons.htmls.sidebars.*; import gplx.x
import gplx.xowa.wikis.nss.*;
import gplx.xowa.wikis.domains.*;
import gplx.langs.htmls.encoders.*; import gplx.xowa.htmls.hrefs.*;
import gplx.xowa.apps.apis.xowa.html.*; import gplx.xowa.apps.apis.xowa.html.skins.*;
import gplx.xowa.apps.apis.xowa.html.*;
import gplx.xowa.langs.vnts.*; import gplx.xowa.htmls.portal.vnts.*;
public class Xow_portal_mgr implements Gfo_invk {
private Xowe_wiki wiki; private boolean lang_is_rtl; private Xoapi_toggle_itm toggle_itm;
private final Vnt_mnu_grp_fmtr vnt_menu_fmtr = new Vnt_mnu_grp_fmtr();
private final Gfo_url_encoder fsys_lnx_encoder = Gfo_url_encoder_.New__fsys_lnx().Make();
private boolean sidebar_enabled;
public Xow_portal_mgr(Xowe_wiki wiki) {
this.wiki = wiki;
this.sidebar_mgr = new Xoh_sidebar_mgr(wiki);
this.missing_ns_cls = Bry_.Eq(wiki.Domain_bry(), Xow_domain_tid_.Bry__home) ? Missing_ns_cls_hide : null; // if home wiki, set missing_ns to application default; if any other wiki, set to null; will be overriden during init
}
public void Init_by_lang(Xol_lang_itm lang) {
lang_is_rtl = !lang.Dir_ltr();
}
private Xoapi_skin_app_base api_skin;
public byte[] Missing_ns_cls() {return missing_ns_cls;} public Xow_portal_mgr Missing_ns_cls_(byte[] v) {missing_ns_cls = v; return this;} private byte[] missing_ns_cls; // NOTE: must be null due to Init check above
public Xoh_sidebar_mgr Sidebar_mgr() {return sidebar_mgr;} private Xoh_sidebar_mgr sidebar_mgr;
public Bry_fmtr Div_home_fmtr() {return div_home_fmtr;} private Bry_fmtr div_home_fmtr = Bry_fmtr.new_("");
public Xow_portal_mgr Init_assert() {if (init_needed) Init(); return this;}
public byte[] Div_jump_to() {return div_jump_to;} private byte[] div_jump_to = Bry_.Empty;
public void Init_by_lang(Xol_lang_itm lang) {
lang_is_rtl = !lang.Dir_ltr();
}
public void Init_by_wiki(Xowe_wiki wiki) {
wiki.App().Cfg().Bind_many_wiki(this, wiki, Cfg__missing_class, Cfg__sidebar_enabled__desktop, Cfg__sidebar_enabled__server);
}
private void Sidebar_enabled_(boolean is_desktop, boolean val) {
// set sidebar_enabled if (a) is_gui and is_desktop; or (b) is_server and !is_desktop
if (wiki.App().Mode().Tid_is_gui()) {
if (is_desktop)
this.sidebar_enabled = val;
}
else {
if (!is_desktop)
this.sidebar_enabled = val;
}
}
public void Init() {
init_needed = false;
if (missing_ns_cls == null) // if missing_ns_cls not set for wiki, use the home wiki's
if (missing_ns_cls == null) {// if missing_ns_cls not set for wiki, use the home wiki's
Missing_ns_cls_(wiki.Appe().Usere().Wiki().Html_mgr().Portal_mgr().Missing_ns_cls());
Xoapi_skins skins = wiki.Appe().Api_root().Html().Skins();
api_skin = wiki.App().Mode().Tid_is_gui() ? skins.Desktop() : skins.Server();
}
Bry_fmtr_eval_mgr eval_mgr = wiki.Eval_mgr();
Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512();
Init_fmtr(tmp_bfr, eval_mgr, div_view_fmtr);
@ -105,7 +119,7 @@ public class Xow_portal_mgr implements Gfo_invk {
return tmp_bfr.To_bry_and_rls();
} public static final byte[] Cls_selected_y = Bry_.new_a7("selected"), Cls_new = Bry_.new_a7("new"), Cls_display_none = Bry_.new_a7("xowa_display_none");
public byte[] Div_logo_bry() {return div_logo_bry;} private byte[] div_logo_bry = Bry_.Empty;
public byte[] Div_home_bry() {return api_skin != null && api_skin.Sidebar_home_enabled() ? div_home_bry : Bry_.Empty;} private byte[] div_home_bry = Bry_.Empty;
public byte[] Div_home_bry() {return sidebar_enabled ? div_home_bry : Bry_.Empty;} private byte[] div_home_bry = Bry_.Empty;
public byte[] Div_sync_bry(Bry_bfr tmp_bfr, boolean manual_enabled, Xow_wiki wiki, Xoa_page page) {
// only show update_html if wmf; DATE:2016-08-31
if ( wiki.Domain_itm().Domain_type().Src() == Xow_domain_tid.Src__wmf
@ -122,7 +136,6 @@ public class Xow_portal_mgr implements Gfo_invk {
div_wikis_fmtr.Bld_bfr_many(tmp_bfr, toggle_itm.Html_toggle_btn(), toggle_itm.Html_toggle_hdr());
return tmp_bfr.To_bry_and_rls();
}
public byte[] Missing_ns_cls() {return missing_ns_cls;} public Xow_portal_mgr Missing_ns_cls_(byte[] v) {missing_ns_cls = v; return this;} private byte[] missing_ns_cls; // NOTE: must be null due to Init check above
private final Bry_fmtr
div_personal_fmtr = Bry_fmtr.new_("~{portal_personal_subj_href};~{portal_personal_subj_text};~{portal_personal_talk_cls};~{portal_personal_talk_href};~{portal_personal_talk_cls};", "portal_personal_subj_href", "portal_personal_subj_text", "portal_personal_subj_cls", "portal_personal_talk_href", "portal_personal_talk_cls")
, div_ns_fmtr = Bry_fmtr.new_("~{portal_ns_subj_href};~{portal_ns_subj_cls};~{portal_ns_talk_href};~{portal_ns_talk_cls};~{portal_div_vnts}", "portal_ns_subj_href", "portal_ns_subj_cls", "portal_ns_talk_href", "portal_ns_talk_cls", "portal_div_vnts")
@ -142,21 +155,24 @@ public class Xow_portal_mgr implements Gfo_invk {
else if (ctx.Match(k, Invk_div_home_)) div_home_fmtr.Fmt_(m.ReadBry("v"));
else if (ctx.Match(k, Invk_div_sync_)) div_sync_fmtr.Fmt_(m.ReadBry("v"));
else if (ctx.Match(k, Invk_div_wikis_)) div_wikis_fmtr.Fmt_(m.ReadBry("v"));
else if (ctx.Match(k, Invk_missing_ns_cls)) return String_.new_u8(missing_ns_cls);
else if (ctx.Match(k, Invk_missing_ns_cls_)) missing_ns_cls = m.ReadBry("v");
else if (ctx.Match(k, Invk_missing_ns_cls_list)) return Options_missing_ns_cls_list;
else if (ctx.Match(k, Cfg__missing_class)) missing_ns_cls = m.ReadBry("v");
else if (ctx.Match(k, Cfg__sidebar_enabled__desktop)) Sidebar_enabled_(Bool_.Y, m.ReadYn("v"));
else if (ctx.Match(k, Cfg__sidebar_enabled__server)) Sidebar_enabled_(Bool_.N, m.ReadYn("v"));
else return Gfo_invk_.Rv_unhandled;
return this;
}
private static final String Invk_div_personal_ = "div_personal_", Invk_div_view_ = "div_view_", Invk_div_ns_ = "div_ns_", Invk_div_home_ = "div_home_"
, Invk_div_sync_ = "div_sync_"
, Invk_div_wikis_ = "div_wikis_"
, Invk_missing_ns_cls = "missing_ns_cls", Invk_missing_ns_cls_ = "missing_ns_cls_", Invk_missing_ns_cls_list = "missing_ns_cls_list"
;
, Invk_div_sync_ = "div_sync_", Invk_div_wikis_ = "div_wikis_";
public static final String Invk_div_logo_ = "div_logo_";
private static Keyval[] Options_missing_ns_cls_list = Keyval_.Ary(Keyval_.new_("", "Show as blue link"), Keyval_.new_("new", "Show as red link"), Keyval_.new_("xowa_display_none", "Hide"));
private static final byte[] Missing_ns_cls_hide = Bry_.new_a7("xowa_display_none");
private static final Bry_fmtr Div_jump_to_fmtr = Bry_fmtr.new_
( "\n <div id=\"jump-to-nav\" class=\"mw-jump\">~{jumpto}<a href=\"#mw-navigation\">~{jumptonavigation}</a>~{comma-separator}<a href=\"#p-search\">~{jumptosearch}</a></div>"
, "jumpto", "jumptonavigation", "comma-separator", "jumptosearch");
private static final String
Cfg__missing_class = "xowa.html.wiki.portal.missing_class"
, Cfg__sidebar_enabled__desktop = "xowa.html.wiki.portal.sidebar_enabled_desktop"
, Cfg__sidebar_enabled__server = "xowa.html.wiki.portal.sidebar_enabled_server"
;
}

View File

@ -37,6 +37,7 @@ class Xowh_portal_mgr_fxt {
wiki = Xoa_app_fxt.Make__wiki__edit(app);
wiki.Ns_mgr().Ns_main().Exists_(true); // needed for ns
wiki.Html_mgr().Portal_mgr().Init_assert(); // needed for personal
wiki.Html_mgr().Portal_mgr().Missing_ns_cls_(Bry_.new_a7("xowa_display_none"));
}
} private Xoae_app app; Xowe_wiki wiki;
public void Test_div_ns_bry(String ttl, String expd) {

View File

@ -32,7 +32,7 @@ public class Xop_section_mgr implements Gfo_invk {
public void Init_by_wiki(Xowe_wiki wiki) {
this.app = wiki.Appe();
this.wiki = wiki;
this.enabled = wiki.App().Cfg().Bind_bool(wiki, gplx.xowa.htmls.core.wkrs.hdrs.Xoh_section_editable_.Cfg__section_editing__enabled, this);
this.enabled = wiki.App().Cfg().Bind_bool(wiki, Cfg__section_editing__enabled, this);
this.tidy_mgr = wiki.Html_mgr().Tidy_mgr();
}
public byte[] Slice_section(Xoa_url url, Xoa_ttl ttl, byte[] src) {
@ -78,7 +78,7 @@ public class Xop_section_mgr implements Gfo_invk {
fmt__section_editable.Bld_many(bfr, page_ttl, section_key, edit_hint, bry__edit_text);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, gplx.xowa.htmls.core.wkrs.hdrs.Xoh_section_editable_.Cfg__section_editing__enabled)) enabled = m.ReadBool("v");
if (ctx.Match(k, Cfg__section_editing__enabled)) enabled = m.ReadBool("v");
else return Gfo_invk_.Rv_unhandled;
return this;
}
@ -86,4 +86,5 @@ public class Xop_section_mgr implements Gfo_invk {
public static final byte[] Bry__meta = Bry_.new_a7("<!--xo_meta|section_edit|");
public static final int Len__meta = Bry__meta.length;
private static final byte[] Qarg__section_key = Bry_.new_u8("section_key");
private static final String Cfg__section_editing__enabled = "xowa.edit.section_edit.enabled";
}

View File

@ -16,10 +16,15 @@ 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.specials; import gplx.*; import gplx.xowa.*;
import gplx.xowa.xtns.wbases.specials.*;
public class Xoa_special_mgr implements Gfo_invk {
private Wdata_itemByTitle_cfg wbase_cfg = new Wdata_itemByTitle_cfg();
private Ordered_hash hash = Ordered_hash_.New();
public Xoa_special_mgr() {
hash.Add(gplx.xowa.xtns.wbases.specials.Wdata_itemByTitle_cfg.Key, new gplx.xowa.xtns.wbases.specials.Wdata_itemByTitle_cfg());
hash.Add(Wdata_itemByTitle_cfg.Key, wbase_cfg);
}
public void Init_by_app(Xoae_app app) {
wbase_cfg.Init_by_app(app);
}
public void Add(String key, Gfo_invk cfg) {hash.Add(key, cfg);}
public Gfo_invk Get_or_null(String key) {return (Gfo_invk)hash.Get_by(key);}

View File

@ -31,11 +31,10 @@ public class Xow_special_mgr {
this.app = wiki.App();
hash = Hash_adp_bry.ci_u8(lang.Case_mgr());
page_allpages = new Xows_page_allpages(wiki);
page_search = new Srch_special_page(wiki);
Evt_lang_changed(wiki.Lang());
}
public Xows_page_allpages Page_allpages() {return page_allpages;} private final Xows_page_allpages page_allpages;
public Srch_special_page Page_search() {return page_search;} private final Srch_special_page page_search;
public Srch_special_page Page_search() {return page_search;} private final Srch_special_page page_search = new Srch_special_page();
public Xou_history_html Page_history() {return page_history;} private final Xou_history_html page_history = new Xou_history_html();
public Xoud_history_special Page_history2() {return page_history2;} private final Xoud_history_special page_history2 = new Xoud_history_special();
public Nearby_mgr Page_nearby() {return page_nearby;} private final Nearby_mgr page_nearby = new Nearby_mgr();

Some files were not shown because too many files have changed in this diff Show More