diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java index 3701c8999..762c54a7d 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java @@ -53,9 +53,13 @@ public class Xocfg_mgr { cache_mgr.Sub(sub, ctx, key, key); return cache_mgr.Get(ctx, key); } + public boolean Get_bool_by_app_or(String key, boolean or) { + String rv = Get_str(Ctx__app, key); + return rv == null ? or : Yn.parse_or(rv, or); + } public boolean Get_bool_by_wiki_or(Xow_wiki wiki, String key, boolean or) { String rv = Get_str(wiki.Domain_itm().Abrv_xo_str(), key); - return rv == null ? Yn.parse_or(rv, or) : or; + return rv == null ? or : Yn.parse_or(rv, 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) { @@ -67,6 +71,15 @@ public class Xocfg_mgr { return or; } } + public int Get_int_by_wiki_or(Xow_wiki wiki, String key, int or) { + String rv = Get_str(wiki.Domain_itm().Abrv_xo_str(), key); + try {return Int_.parse(rv);} + catch (Exception exc) { + Err_.Noop(exc); + Gfo_usr_dlg_.Instance.Warn_many("", "", "cfg:failed to parse int; key=~{0} val=~{1}", key, rv); + return or; + } + } public int Get_int_or(String ctx, String key, int or) { String rv = cache_mgr.Get(ctx, key); try {return Int_.parse(rv);} diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java index 8ccecc336..03234dc00 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java @@ -19,7 +19,7 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gp import gplx.langs.mustaches.*; import gplx.core.gfobjs.*; public class Xoedit_grp implements Xoedit_nde, Mustache_doc_itm { - private String lang, name, help; + private String lang, name; public Xoedit_grp(int id, String key, int sort) { this.id = id; this.key = key; @@ -27,7 +27,9 @@ public class Xoedit_grp implements Xoedit_nde, Mustache_doc_itm { } public int Id() {return id;} private final int id; public String Key() {return key;} private final String key; - public int Sort() {return sort;} private final int sort; + public int Sort() {return sort;} private final int sort; + public String Help() {return help;} private String help; + public Xoedit_itm[] Itms() {return itms;} private Xoedit_itm[] itms = new Xoedit_itm[0]; public void Itms_(Xoedit_itm[] v) {this.itms = v;} public void Load_by_i18n(String lang, String name, String help) { diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java index 547c48087..f6afc7af3 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java @@ -22,7 +22,7 @@ import gplx.xowa.addons.apps.cfgs.mgrs.types.*; public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { private int gui_type; private boolean edited; - private String data_type, gui_args, dflt, lang, name, help, ctx, val, date; + private String data_type, gui_args, dflt, lang, name, ctx, val, date; private Xocfg_type_mgr type_mgr; public Xoedit_itm(Xocfg_type_mgr type_mgr, int id, String key, int sort) { this.type_mgr = type_mgr; @@ -32,6 +32,8 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { } public int Id() {return id;} private final int id; public String Key() {return key;} private final String key; + public String Help() {return help;} private String help; + public int Sort() {return sort;} private final int sort; public void Load_by_meta(int scope_id, String data_type, int gui_type, String gui_args, String dflt) { this.data_type = data_type; diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nde.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nde.java index 5d05b8027..e13efd05b 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nde.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_nde.java @@ -19,5 +19,6 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gp public interface Xoedit_nde { int Id(); String Key(); + String Help(); void Load_by_i18n(String lang, String name, String help); } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_root.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_root.java index 3c64ba6b3..87dd0be3d 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_root.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_root.java @@ -21,8 +21,10 @@ import gplx.core.gfobjs.*; public class Xoedit_root implements Mustache_doc_itm { private final Xoedit_nav_mgr nav_mgr; private final Xoedit_grp[] grps; - public Xoedit_root(Xoedit_nav_mgr nav_mgr, Xoedit_grp[] grps) { + private final String page_help; + public Xoedit_root(Xoedit_nav_mgr nav_mgr, String page_help, Xoedit_grp[] grps) { this.nav_mgr = nav_mgr; + this.page_help = page_help; this.grps = grps; } public Gfobj_nde To_nde() { @@ -33,16 +35,18 @@ public class Xoedit_root implements Mustache_doc_itm { Xoedit_grp itm = grps[i]; list.Add(itm.To_nde()); } + rv.Add_str("page_help", page_help); rv.Add_ary("grps", new Gfobj_ary((Gfobj_nde[])list.To_ary_and_clear(Gfobj_nde.class))); return rv; } public boolean Mustache__write(String k, Mustache_bfr bfr) { + if (String_.Eq(k, "page_help")) bfr.Add_str_u8(page_help); return true; } - public Mustache_doc_itm[] Mustache__subs(String key) { - if (String_.Eq(key, "grps")) return grps; - else if (String_.Eq(key, "nav_exists")) return Mustache_doc_itm_.Ary__bool(nav_mgr.Itms().length > 1); // NOTE: do not show combo if 0 or 1 item - else if (String_.Eq(key, "itms")) return nav_mgr.Itms(); + public Mustache_doc_itm[] Mustache__subs(String k) { + if (String_.Eq(k, "grps")) return grps; + else if (String_.Eq(k, "nav_exists")) return Mustache_doc_itm_.Ary__bool(nav_mgr.Itms().length > 1); // NOTE: do not show combo if 0 or 1 item + else if (String_.Eq(k, "itms")) return nav_mgr.Itms(); return Mustache_doc_itm_.Ary__empty; } } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java index dd066bfe0..60fe58fb5 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_loader.java @@ -56,8 +56,10 @@ public class Xocfg_edit_loader { Load_itm_data(itm_list, ctx); Load_i18n(grp_list, itm_list, lang); + Xoedit_nde page_nde = grp_list.Get_by_or_fail(grp_key); + grp_list.Delete_container_grps(); - return new Xoedit_root(Load_nav_mgr(grp_key), (Xoedit_grp[])grp_list.To_grp_ary_and_clear()); + return new Xoedit_root(Load_nav_mgr(grp_key), page_nde.Help(), (Xoedit_grp[])grp_list.To_grp_ary_and_clear()); } private Xoedit_nav_mgr Load_nav_mgr(String grp_key) { // get grp_id diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_svc.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_svc.java index 6ce5a6f75..ebc3cce64 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_svc.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/maints/services/Xocfg_maint_svc.java @@ -37,13 +37,13 @@ public class Xocfg_maint_svc { db_app.Conn().Txn_bgn("xo__cfg_maint__upsert"); byte[] anch_find_bry = Bry_.new_a7("
}'>" - , " }'>" - , " }'>" - , " }'>" - , " }'>" - , " }'> " - , " }'>" - , " }'>" // HOME - , "
" - , "" - )) - , Dflt_html_fmtr_viewed = Bry_.new_a7("\n ~{<>msgs.get('api-xowa.html.modules.popups.msgs.view_time-name');<>}~{viewed_val}") - , Dflt_html_fmtr_wiki = Bry_.new_a7("\n ~{<>msgs.get('api-xowa.html.modules.popups.msgs.wiki-name');<>}~{wiki_val}") - , Dflt_html_fmtr_next_sect = Bry_.new_a7("\n\n~{<>msgs.get('api-xowa.html.modules.popups.msgs.next_sect-name');<>}~{next_sect_val}") - ; - public static final String[] - Dflt_html_fmtr_popup_keys = String_.Ary("content", "page_lang_ltr", "page_url", "page_title", "popup_id", "wiki_item", "page_size", "edit_time", "view_time_item", "xowa_root_dir") - , Dflt_html_fmtr_viewed_keys = String_.Ary("viewed_val") - , Dflt_html_fmtr_wiki_keys = String_.Ary("wiki_val") - , Dflt_html_fmtr_next_sect_keys = String_.Ary("next_sect_val") - ; - public static final byte[] - Dflt_ns_allowed = Bry_.Empty - ; - public static final int - Dflt_show_init_word_count = 128 - , Dflt_show_more_word_count = 192 - , Dflt_show_all_if_less_than = -1 - , Dflt_show_all_win_max_w = -1 - , Dflt_win_show_delay = 600, Dflt_win_hide_delay = 400 - , Dflt_win_max_w = -1, Dflt_win_max_h = -1 - , Dflt_win_show_all_max_w = 800 - , Dflt_scan_len = 1 * Io_mgr.Len_kb - , Dflt_scan_max = 32 * Io_mgr.Len_kb - , Dflt_read_til_stop_fwd = 32 - , Dflt_read_til_stop_bwd = 16 - , Dflt_stop_if_hdr_after = 96 - , Dflt_tmpl_tkn_max = 8 * Io_mgr.Len_kb - ; - public static final boolean - Dflt_win_bind_focus_blur = false + Invk_show_more = "show_more", Invk_show_all = "show_all" ; } diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java b/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java index d5e5df037..053e3b5bb 100644 --- a/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java +++ b/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java @@ -130,7 +130,7 @@ public class Xog_tab_itm implements Gfo_invk { if (url.Vnt_bry() != null) Cur_vnt_(wiki, url.Vnt_bry()); Tab_name_(new_tab_name); usr_dlg.Prog_one("", "", "loading: ~{0}", String_.new_u8(ttl.Raw())); - if (app.Api_root().Html().Modules().Popups().Enabled()) + if (wiki.Html_mgr().Head_mgr().Popup_mgr().Enabled()) this.Html_box().Html_js_eval_script("if (window.xowa_popups_hide_all != null) window.xowa_popups_hide_all();"); // should be more configurable; DATE:2014-07-09 app.Thread_mgr_old().Page_load_mgr().Add_at_end(new Load_page_wkr(this, wiki, url, ttl)).Run(); } diff --git a/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_itm__popups.java b/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_itm__popups.java index 99a84b275..fc478b9c5 100644 --- a/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_itm__popups.java +++ b/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_itm__popups.java @@ -18,6 +18,7 @@ along with this program. If not, see . package gplx.xowa.htmls.heads; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.guis.*; import gplx.xowa.apps.apis.xowa.html.modules.*; +import gplx.xowa.htmls.modules.popups.*; import gplx.xowa.addons.apps.cfgs.*; public class Xoh_head_itm__popups extends Xoh_head_itm__base { @Override public byte[] Key() {return Xoh_head_itm_.Key__popups;} @Override public int Flags() {return Flag__css_include | Flag__js_head_global | Flag__js_tail_script;} @@ -28,21 +29,21 @@ public class Xoh_head_itm__popups extends Xoh_head_itm__base { wtr.Write_css_include(Css_url); } @Override public void Write_js_head_global(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_head_wtr wtr) { - Xoapi_popups api_popups = app.Api_root().Html().Modules().Popups(); - wtr.Write_js_global_ini_atr_val(Key_win_show_delay , api_popups.Win_show_delay()); - wtr.Write_js_global_ini_atr_val(Key_win_hide_delay , api_popups.Win_hide_delay()); - wtr.Write_js_global_ini_atr_val(Key_win_max_w , api_popups.Win_max_w()); - wtr.Write_js_global_ini_atr_val(Key_win_max_h , api_popups.Win_max_h()); - wtr.Write_js_global_ini_atr_val(Key_win_show_all_max_w , api_popups.Win_show_all_max_w()); - wtr.Write_js_global_ini_atr_val(Key_win_bind_focus_blur , api_popups.Win_bind_focus_blur()); + Xocfg_mgr cfg_mgr = app.Cfg(); + wtr.Write_js_global_ini_atr_val(Key_win_show_delay , cfg_mgr.Get_int_by_wiki_or(wiki, Xow_popup_mgr.Cfg__win_show_delay, 0)); + wtr.Write_js_global_ini_atr_val(Key_win_hide_delay , cfg_mgr.Get_int_by_wiki_or(wiki, Xow_popup_mgr.Cfg__win_hide_delay, 0)); + wtr.Write_js_global_ini_atr_val(Key_win_max_w , cfg_mgr.Get_int_by_wiki_or(wiki, Xow_popup_mgr.Cfg__win_max_w, 0)); + wtr.Write_js_global_ini_atr_val(Key_win_max_h , cfg_mgr.Get_int_by_wiki_or(wiki, Xow_popup_mgr.Cfg__win_max_h, 0)); + wtr.Write_js_global_ini_atr_val(Key_win_show_all_max_w , cfg_mgr.Get_int_by_wiki_or(wiki, Xow_popup_mgr.Cfg__win_show_all_max_w, 0)); + wtr.Write_js_global_ini_atr_val(Key_win_bind_focus_blur , cfg_mgr.Get_bool_by_wiki_or(wiki, Xow_popup_mgr.Cfg__win_bind_focus_blur, false)); wtr.Write_js_global_ini_atr_val(Key_win_bind_hover_area , bind_hover_area); } @Override public void Write_js_tail_script(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xoh_head_wtr wtr) { wtr.Write_js_line(Jquery_init); // NOTE: must assert that jquery is init'd, else popup.js will not compile after going back / forward; DATE:2014-09-10 wtr.Write_js_tail_load_lib(app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "res", "src", "xowa", "popups", "popups.js")); - } public static final byte[] Jquery_init = Bry_.new_a7("xowa.js.jquery.init();"), Mw_init = Bry_.new_a7("xowa.js.mediaWiki.init();"); + } public static final byte[] Jquery_init = Bry_.new_a7("xowa.js.jquery.init();"), Mw_init = Bry_.new_a7("xowa.js.mediaWiki.init();"); private static byte[] Css_url; - private static final byte[] + private static final byte[] Key_win_show_delay = Bry_.new_a7("popups-win-show_delay") , Key_win_hide_delay = Bry_.new_a7("popups-win-hide_delay") , Key_win_max_w = Bry_.new_a7("popups-win-max_w") diff --git a/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_mgr.java b/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_mgr.java index 390dff9db..f9855f82a 100644 --- a/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_mgr.java @@ -70,7 +70,7 @@ public class Xoh_head_mgr implements gplx.core.brys.Bfr_arg { itm__navframe.Enabled_y_(); boolean popups_enabled = !app.Mode().Tid_is_http() // do not enable if http_server, else js errors when calling xowa_exec; DATE:2016-06-22 - && app.Api_root().Html().Modules().Popups().Enabled(); // check user_cfg + && wiki.Html_mgr().Head_mgr().Popup_mgr().Enabled(); // check user_cfg itm__popups.Enabled_(popups_enabled); return this; } diff --git a/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_cfg.java b/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_cfg.java index ea1b4b9ed..4dd8a119d 100644 --- a/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_cfg.java +++ b/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_cfg.java @@ -18,16 +18,16 @@ along with this program. If not, see . package gplx.xowa.htmls.modules.popups; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.modules.*; import gplx.xowa.apps.apis.xowa.html.modules.*; public class Xow_popup_cfg { - public int Show_all_if_less_than() {return show_all_if_less_than;} public void Show_all_if_less_than_(int v) {show_all_if_less_than = v;} private int show_all_if_less_than = Xoapi_popups.Dflt_show_all_if_less_than; - public int Tmpl_read_max() {return tmpl_read_max;} public void Tmpl_read_max_(int v) {tmpl_read_max = v;} private int tmpl_read_max = Xoapi_popups.Dflt_scan_max; - public int Tmpl_read_len() {return tmpl_read_len;} public void Tmpl_read_len_(int v) {tmpl_read_len = v;} private int tmpl_read_len = Xoapi_popups.Dflt_scan_len; - public int Read_til_stop_fwd() {return read_til_stop_fwd;} public void Read_til_stop_fwd_(int v) {read_til_stop_fwd = v;} private int read_til_stop_fwd = Xoapi_popups.Dflt_read_til_stop_fwd; - public int Read_til_stop_bwd() {return read_til_stop_bwd;} public void Read_til_stop_bwd_(int v) {read_til_stop_bwd = v;} private int read_til_stop_bwd = Xoapi_popups.Dflt_read_til_stop_bwd; - public int Stop_if_hdr_after() {return stop_if_hdr_after;} public void Stop_if_hdr_after_(int v) {stop_if_hdr_after = v;} private int stop_if_hdr_after = Xoapi_popups.Dflt_stop_if_hdr_after; + public int Show_all_if_less_than() {return show_all_if_less_than;} public void Show_all_if_less_than_(int v) {show_all_if_less_than = v;} private int show_all_if_less_than; + public int Tmpl_read_max() {return tmpl_read_max;} public void Tmpl_read_max_(int v) {tmpl_read_max = v;} private int tmpl_read_max; + public int Tmpl_read_len() {return tmpl_read_len;} public void Tmpl_read_len_(int v) {tmpl_read_len = v;} private int tmpl_read_len; + public int Read_til_stop_fwd() {return read_til_stop_fwd;} public void Read_til_stop_fwd_(int v) {read_til_stop_fwd = v;} private int read_til_stop_fwd; + public int Read_til_stop_bwd() {return read_til_stop_bwd;} public void Read_til_stop_bwd_(int v) {read_til_stop_bwd = v;} private int read_til_stop_bwd; + public int Stop_if_hdr_after() {return stop_if_hdr_after;} public void Stop_if_hdr_after_(int v) {stop_if_hdr_after = v;} private int stop_if_hdr_after; public boolean Stop_if_hdr_after_enabled() {return stop_if_hdr_after > 0;} public byte[] Ellipsis() {return ellipsis;} public void Ellipsis_(byte[] v) {ellipsis = v;} private byte[] ellipsis = Bry_.Empty; public byte[] Notoc() {return notoc;} public void Notoc_(byte[] v) {notoc = v;} private byte[] notoc = Notoc_const; - public static final byte[] + public static final byte[] Notoc_const = Bry_.new_a7("\n__NOTOC__") // NOTE: always add a whitespace tkn else __NOTOC__ will be deactivated if last tkn is lnke; DATE:2014-06-22 , Msg_key_ellipsis = Bry_.new_a7("ellipsis") ; diff --git a/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_html_mkr.java b/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_html_mkr.java index 26f700dc0..abf183cef 100644 --- a/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_html_mkr.java +++ b/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_html_mkr.java @@ -20,10 +20,10 @@ import gplx.core.brys.fmtrs.*; import gplx.xowa.apps.apis.xowa.html.modules.*; public class Xow_popup_html_mkr { private Xoae_app app; private Xowe_wiki wiki; - public Bry_fmtr Fmtr_popup() {return fmtr_popup;} private Bry_fmtr fmtr_popup = Bry_fmtr.keys_(Xoapi_popups.Dflt_html_fmtr_popup_keys); - public Bry_fmtr Fmtr_viewed() {return fmtr_viewed;} private Bry_fmtr fmtr_viewed = Bry_fmtr.keys_(Xoapi_popups.Dflt_html_fmtr_viewed_keys); - public Bry_fmtr Fmtr_wiki() {return fmtr_wiki;} private Bry_fmtr fmtr_wiki = Bry_fmtr.keys_(Xoapi_popups.Dflt_html_fmtr_wiki_keys); - public Bry_fmtr Fmtr_next_sect() {return fmtr_next_sect;} private Bry_fmtr fmtr_next_sect = Bry_fmtr.keys_(Xoapi_popups.Dflt_html_fmtr_next_sect_keys); + public Bry_fmtr Fmtr_popup() {return fmtr_popup;} private Bry_fmtr fmtr_popup = Bry_fmtr.new_(Dflt_html_fmtr_popup, Dflt_html_fmtr_popup_keys); + public Bry_fmtr Fmtr_viewed() {return fmtr_viewed;} private Bry_fmtr fmtr_viewed = Bry_fmtr.new_(Dflt_html_fmtr_viewed, Dflt_html_fmtr_viewed_keys); + public Bry_fmtr Fmtr_wiki() {return fmtr_wiki;} private Bry_fmtr fmtr_wiki = Bry_fmtr.new_(Dflt_html_fmtr_wiki, Dflt_html_fmtr_wiki_keys); + public Bry_fmtr Fmtr_next_sect() {return fmtr_next_sect;} private Bry_fmtr fmtr_next_sect = Bry_fmtr.new_(Dflt_html_fmtr_next_sect, Dflt_html_fmtr_next_sect_keys); public void Output_js_clean_(boolean v) {output_js_clean = v;} private boolean output_js_clean = true; public void Output_tidy_(boolean v) {output_tidy = v;} private boolean output_tidy = true; public void Ctor(Xoae_app app, Xowe_wiki wiki) { @@ -53,6 +53,41 @@ public class Xow_popup_html_mkr { ); return wrdx_bfr.To_bry_and_clear(); } + + private static final byte[] + Dflt_html_fmtr_popup = Bry_.new_a7(String_.Concat_lines_nl_skip_last + ( "
" + , "
~{content}" + , "
" + , "
" + , "
" + , " ~{page_title}~{wiki_item}" + , " ~{<>msgs.get('api-xowa.html.modules.popups.msgs.size-name');<>}~{page_size}" + , " ~{<>msgs.get('api-xowa.html.modules.popups.msgs.edited-name');<>}~{edit_time}~{view_time_item}" + , "
" + , "
" + , "
" + , " }'>" + , " }'>" + , " }'>" + , " }'>" + , " }'>" + , " }'> " + , " }'>" + , " }'>" // HOME + , "
" + , "
" + )) + , Dflt_html_fmtr_viewed = Bry_.new_a7("\n ~{<>msgs.get('api-xowa.html.modules.popups.msgs.view_time-name');<>}~{viewed_val}") + , Dflt_html_fmtr_wiki = Bry_.new_a7("\n ~{<>msgs.get('api-xowa.html.modules.popups.msgs.wiki-name');<>}~{wiki_val}") + , Dflt_html_fmtr_next_sect = Bry_.new_a7("\n\n~{<>msgs.get('api-xowa.html.modules.popups.msgs.next_sect-name');<>}~{next_sect_val}") + ; + private static final String[] + Dflt_html_fmtr_popup_keys = String_.Ary("content", "page_lang_ltr", "page_url", "page_title", "popup_id", "wiki_item", "page_size", "edit_time", "view_time_item", "xowa_root_dir") + , Dflt_html_fmtr_viewed_keys = String_.Ary("viewed_val") + , Dflt_html_fmtr_wiki_keys = String_.Ary("wiki_val") + , Dflt_html_fmtr_next_sect_keys = String_.Ary("next_sect_val") + ; } class Xow_popup_html_bldr_ { public static byte[] Bld_fmtr_wiki(Bry_fmtr fmtr, Bry_bfr wrdx_bfr, byte[] wiki_domain, byte[] page_domain) { diff --git a/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_mgr.java b/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_mgr.java index dbf0cace8..229982878 100644 --- a/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_mgr.java @@ -18,6 +18,7 @@ along with this program. If not, see . package gplx.xowa.htmls.modules.popups; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.modules.*; import gplx.core.primitives.*; import gplx.core.threads.*; import gplx.core.envs.*; import gplx.core.js.*; +import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.wikis.nss.*; import gplx.xowa.guis.views.*; import gplx.xowa.htmls.hrefs.*; @@ -25,7 +26,7 @@ import gplx.xowa.specials.*; import gplx.xowa.apps.apis.xowa.html.modules.*; public class Xow_popup_mgr implements Gfo_invk, Gfo_evt_itm { private Xoae_app app; private Xowe_wiki wiki; private Js_wtr js_wtr = new Js_wtr(); - private int show_init_word_count = Xoapi_popups.Dflt_show_init_word_count, show_more_word_count = Xoapi_popups.Dflt_show_more_word_count; + private int show_init_word_count, show_more_word_count; private Xoa_url tmp_url = Xoa_url.blank(); private static final Object thread_lock = new Object(); private Xow_popup_itm async_itm; private Gfo_invk async_cmd_show; private int async_id_next = 1; public Xow_popup_mgr(Xowe_wiki wiki) { @@ -34,33 +35,15 @@ public class Xow_popup_mgr implements Gfo_invk, Gfo_evt_itm { } public Gfo_evt_mgr Evt_mgr() {return ev_mgr;} private Gfo_evt_mgr ev_mgr; public Xow_popup_parser Parser() {return parser;} private Xow_popup_parser parser = new Xow_popup_parser(); + public boolean Enabled() {return enabled;} public void Enabled_(boolean v) {this.enabled = v;} private boolean enabled = true; // TEST: false will fail Xob_init_base_tst; DATE:2016-12-13 public void Init_by_wiki(Xowe_wiki wiki) { parser.Init_by_wiki(wiki); - Xoapi_popups api_popups = app.Api_root().Html().Modules().Popups(); - show_init_word_count = api_popups.Show_init_word_count(); - show_more_word_count = api_popups.Show_more_word_count(); - Ns_allowed_(api_popups.Ns_allowed()); - parser.Cfg().Show_all_if_less_than_(api_popups.Show_all_if_less_than()); - parser.Cfg().Tmpl_read_len_(api_popups.Scan_len()); - parser.Cfg().Tmpl_read_max_(api_popups.Scan_max()); - parser.Cfg().Read_til_stop_fwd_(api_popups.Read_til_stop_fwd()); - parser.Cfg().Read_til_stop_bwd_(api_popups.Read_til_stop_bwd()); - parser.Cfg().Stop_if_hdr_after_(api_popups.Stop_if_hdr_after()); - parser.Tmpl_tkn_max_(api_popups.Tmpl_tkn_max()); - if (!Env_.Mode_testing()) - parser.Tmpl_keeplist_init_(api_popups.Tmpl_keeplist()); - parser.Wrdx_mkr().Xnde_ignore_ids_(api_popups.Xnde_ignore_ids()); - parser.Html_mkr().Fmtr_popup().Fmt_(api_popups.Html_fmtr_popup()); - parser.Html_mkr().Fmtr_viewed().Fmt_(api_popups.Html_fmtr_viewed()); - parser.Html_mkr().Fmtr_wiki().Fmt_(api_popups.Html_fmtr_wiki()); - parser.Html_mkr().Fmtr_next_sect().Fmt_(api_popups.Html_fmtr_next_sect_fmt()); - Gfo_evt_mgr_.Sub_same_many(api_popups, this - , Xoapi_popups.Evt_show_init_word_count_changed, Xoapi_popups.Evt_show_more_word_count_changed , Xoapi_popups.Evt_show_all_if_less_than_changed - , Xoapi_popups.Evt_scan_len_changed, Xoapi_popups.Evt_scan_max_changed - , Xoapi_popups.Evt_read_til_stop_fwd_changed, Xoapi_popups.Evt_read_til_stop_bwd_changed, Xoapi_popups.Evt_stop_if_hdr_after_changed - , Xoapi_popups.Evt_ns_allowed_changed - , Xoapi_popups.Evt_xnde_ignore_ids_changed, Xoapi_popups.Evt_tmpl_tkn_max_changed, Xoapi_popups.Evt_tmpl_keeplist_changed - , Xoapi_popups.Evt_html_fmtr_popup_changed, Xoapi_popups.Evt_html_fmtr_viewed_changed, Xoapi_popups.Evt_html_fmtr_wiki_changed, Xoapi_popups.Evt_html_fmtr_next_sect_changed + wiki.App().Cfg().Bind_many_wiki(this, wiki + , Cfg__enabled + , Cfg__show_init_word_count, Cfg__show_more_word_count + , Cfg__show_all_if_less_than, Cfg__read_til_stop_fwd, Cfg__read_til_stop_bwd, Cfg__stop_if_hdr_after + , Cfg__tmpl_tkn_max, Cfg__tmpl_keeplist + , Cfg__ns_allowed, Cfg__xnde_ignore_ids, Cfg__scan_len, Cfg__scan_max ); } public String Show_init(int id, byte[] href, byte[] tooltip) { @@ -216,22 +199,26 @@ public class Xow_popup_mgr implements Gfo_invk, Gfo_evt_itm { public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_show_popup_async)) Show_popup_async(); else if (ctx.Match(k, Invk_show_popup)) Show_popup(); - else if (ctx.Match(k, Xoapi_popups.Evt_show_init_word_count_changed)) show_init_word_count = m.ReadInt("v"); - else if (ctx.Match(k, Xoapi_popups.Evt_show_more_word_count_changed)) show_more_word_count = m.ReadInt("v"); - else if (ctx.Match(k, Xoapi_popups.Evt_show_all_if_less_than_changed)) parser.Cfg().Show_all_if_less_than_(m.ReadInt("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_xnde_ignore_ids_changed)) parser.Wrdx_mkr().Xnde_ignore_ids_(m.ReadBry("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_scan_len_changed)) parser.Cfg().Tmpl_read_len_(m.ReadInt("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_scan_max_changed)) parser.Cfg().Tmpl_read_max_(m.ReadInt("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_read_til_stop_bwd_changed)) parser.Cfg().Read_til_stop_bwd_(m.ReadInt("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_read_til_stop_fwd_changed)) parser.Cfg().Read_til_stop_fwd_(m.ReadInt("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_stop_if_hdr_after_changed)) parser.Cfg().Stop_if_hdr_after_(m.ReadInt("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_ns_allowed_changed)) Ns_allowed_(m.ReadBry("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_tmpl_tkn_max_changed)) parser.Tmpl_tkn_max_(m.ReadInt("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_tmpl_keeplist_changed)) parser.Tmpl_keeplist_init_(m.ReadBry("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_html_fmtr_popup_changed)) parser.Html_mkr().Fmtr_popup().Fmt_(m.ReadBry("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_html_fmtr_viewed_changed)) parser.Html_mkr().Fmtr_viewed().Fmt_(m.ReadBry("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_html_fmtr_wiki_changed)) parser.Html_mkr().Fmtr_wiki().Fmt_(m.ReadBry("v")); - else if (ctx.Match(k, Xoapi_popups.Evt_html_fmtr_next_sect_changed)) parser.Html_mkr().Fmtr_next_sect().Fmt_(m.ReadBry("v")); + + else if (ctx.Match(k, Cfg__enabled)) enabled = m.ReadYn("v"); + else if (ctx.Match(k, Cfg__show_init_word_count)) show_init_word_count = m.ReadInt("v"); + else if (ctx.Match(k, Cfg__show_more_word_count)) show_more_word_count = m.ReadInt("v"); + else if (ctx.Match(k, Cfg__show_all_if_less_than)) parser.Cfg().Show_all_if_less_than_(m.ReadInt("v")); + else if (ctx.Match(k, Cfg__read_til_stop_fwd)) parser.Cfg().Read_til_stop_fwd_(m.ReadInt("v")); + else if (ctx.Match(k, Cfg__read_til_stop_bwd)) parser.Cfg().Read_til_stop_bwd_(m.ReadInt("v")); + else if (ctx.Match(k, Cfg__stop_if_hdr_after)) parser.Cfg().Stop_if_hdr_after_(m.ReadInt("v")); + else if (ctx.Match(k, Cfg__tmpl_tkn_max)) + parser.Tmpl_tkn_max_(m.ReadInt("v")); + else if (ctx.Match(k, Cfg__tmpl_keeplist)) + parser.Tmpl_keeplist_init_(m.ReadBry("v")); + else if (ctx.Match(k, Cfg__ns_allowed)) + Ns_allowed_(m.ReadBry("v")); + else if (ctx.Match(k, Cfg__xnde_ignore_ids)) + parser.Wrdx_mkr().Xnde_ignore_ids_(m.ReadBry("v")); + else if (ctx.Match(k, Cfg__scan_len)) + parser.Cfg().Tmpl_read_len_(m.ReadInt("v")); + else if (ctx.Match(k, Cfg__scan_max)) + parser.Cfg().Tmpl_read_max_(m.ReadInt("v")); else return Gfo_invk_.Rv_unhandled; return this; } @@ -244,61 +231,27 @@ public class Xow_popup_mgr implements Gfo_invk, Gfo_evt_itm { Mode_show_more = Bry_.new_a7("more") , Mode_show_all = Bry_.new_a7("all") ; -} -class Xow_popup_mgr_ { - public static String Bld_js_cmd(Js_wtr js_wtr, String cbk, byte[] mode, byte[] href, byte[] html) { - js_wtr.Func_init(cbk); - js_wtr.Prm_bry(mode); - js_wtr.Prm_bry(href); - js_wtr.Prm_bry(html); - js_wtr.Func_term(); - return js_wtr.To_str_and_clear(); - } -} -class Load_popup_wkr implements Gfo_thread_wkr { - private Xow_popup_itm itm; private Xoae_page cur_page; private Xoa_url tmp_url; - private Hash_adp ns_allowed_regy; - private Int_obj_ref ns_allowed_regy_key = Int_obj_ref.New_zero(); - public Load_popup_wkr(Xowe_wiki wiki, Xoae_page cur_page, Xow_popup_itm itm, Xoa_url tmp_url, Hash_adp ns_allowed_regy, Int_obj_ref ns_allowed_regy_key) { - this.wiki = wiki; this.cur_page = cur_page; this.itm = itm; this.tmp_url = tmp_url; this.ns_allowed_regy = ns_allowed_regy; this.ns_allowed_regy_key = ns_allowed_regy_key; - } - public String Thread__name() {return "xowa.load_popup_wkr";} - public boolean Thread__resume() {return false;} - public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; - public byte[] Rslt_bry() {return rslt_bry;} private byte[] rslt_bry; - public boolean Rslt_done() {return rslt_done;} private boolean rslt_done; - public void Rslt_(byte[] bry) {this.rslt_done = true; rslt_bry = bry;} - public void Thread__exec() { - Xoae_app app = wiki.Appe(); - try { - if (itm.Canceled()) return; - cur_page.Popup_mgr().Itms().Add_if_dupe_use_nth(itm.Popup_id(), itm); - app.Html__href_parser().Parse_as_url(tmp_url, itm.Page_href(), wiki, cur_page.Ttl().Full_url()); // NOTE: use Full_url, not Page_url, else anchors won't work for non-main ns; PAGE:en.w:Project:Sandbox; DATE:2014-08-07 - if (!Xoa_url_.Tid_is_pagelike(tmp_url.Tid())) return; // NOTE: do not get popups for "file:///"; DATE:2015-04-05 - Xowe_wiki popup_wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_or_null(tmp_url.Wiki_bry()); - popup_wiki.Init_assert(); - Xoa_ttl popup_ttl = Xoa_ttl.Parse(popup_wiki, tmp_url.To_bry_page_w_anch()); - switch (popup_ttl.Ns().Id()) { - case Xow_ns_.Tid__media: - case Xow_ns_.Tid__file: - return; // do not popup for media or file - case Xow_ns_.Tid__special: - if (!Xow_special_meta_.Itm__popup_history.Match_ttl(popup_ttl)) return; // do not popup for special, unless popupHistory; DATE:2015-04-20 - break; - } - if (ns_allowed_regy.Count() > 0 && !ns_allowed_regy.Has(ns_allowed_regy_key.Val_(popup_ttl.Ns().Id()))) return; - itm.Init(popup_wiki.Domain_bry(), popup_ttl); - Xoae_page popup_page = popup_wiki.Data_mgr().Load_page_by_ttl(popup_ttl); - byte[] rv = popup_wiki.Html_mgr().Head_mgr().Popup_mgr().Parser().Parse(wiki, popup_page, cur_page.Tab_data().Tab(), itm); - Xow_popup_mgr.Update_progress_bar(app, wiki, cur_page, itm); - Rslt_(rv); - } - catch(Exception e) { - app.Usr_dlg().Warn_many("", "", "failed to get popup: href=~{0} err=~{1}", itm.Page_href(), Err_.Message_gplx_full(e)); - Rslt_(null); - } - finally { - app.Thread_mgr_old().Page_load_mgr().Resume(); - } - } + private static final String + Cfg__enabled = "xowa.addon.popups.enabled" + , Cfg__show_init_word_count = "xowa.addon.popups.show_init_word_count" + , Cfg__show_more_word_count = "xowa.addon.popups.show_more_word_count" + , Cfg__show_all_if_less_than = "xowa.addon.popups.show_all_if_less_than" + , Cfg__read_til_stop_fwd = "xowa.addon.popups.read_til_stop_fwd" + , Cfg__read_til_stop_bwd = "xowa.addon.popups.read_til_stop_bwd" + , Cfg__stop_if_hdr_after = "xowa.addon.popups.stop_if_hdr_after" + , Cfg__tmpl_tkn_max = "xowa.addon.popups.tmpl_tkn_max" + , Cfg__tmpl_keeplist = "xowa.addon.popups.tmpl_keeplist" + , Cfg__ns_allowed = "xowa.addon.popups.ns_allowed" + , Cfg__xnde_ignore_ids = "xowa.addon.popups.xnde_ignore_ids" + , Cfg__scan_len = "xowa.addon.popups.scan_len" + , Cfg__scan_max = "xowa.addon.popups.scan_max" + ; + public static final String + Cfg__win_show_delay = "xowa.addon.popups.win_show_delay" + , Cfg__win_hide_delay = "xowa.addon.popups.win_hide_delay" + , Cfg__win_max_w = "xowa.addon.popups.win_max_w" + , Cfg__win_max_h = "xowa.addon.popups.win_max_h" + , Cfg__win_show_all_max_w = "xowa.addon.popups.win_show_all_max_w" + , Cfg__win_bind_focus_blur = "xowa.addon.popups.win_bind_focus_blur" + ; } diff --git a/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_mgr_.java b/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_mgr_.java new file mode 100644 index 000000000..ccc79a8e7 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_mgr_.java @@ -0,0 +1,77 @@ +/* +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 . +*/ +package gplx.xowa.htmls.modules.popups; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.modules.*; +import gplx.core.threads.*; import gplx.core.primitives.*; import gplx.core.js.*; +import gplx.xowa.wikis.nss.*; import gplx.xowa.specials.*; +class Xow_popup_mgr_ { + public static String Bld_js_cmd(Js_wtr js_wtr, String cbk, byte[] mode, byte[] href, byte[] html) { + js_wtr.Func_init(cbk); + js_wtr.Prm_bry(mode); + js_wtr.Prm_bry(href); + js_wtr.Prm_bry(html); + js_wtr.Func_term(); + return js_wtr.To_str_and_clear(); + } +} +class Load_popup_wkr implements Gfo_thread_wkr { + private Xow_popup_itm itm; private Xoae_page cur_page; private Xoa_url tmp_url; + private Hash_adp ns_allowed_regy; + private Int_obj_ref ns_allowed_regy_key = Int_obj_ref.New_zero(); + public Load_popup_wkr(Xowe_wiki wiki, Xoae_page cur_page, Xow_popup_itm itm, Xoa_url tmp_url, Hash_adp ns_allowed_regy, Int_obj_ref ns_allowed_regy_key) { + this.wiki = wiki; this.cur_page = cur_page; this.itm = itm; this.tmp_url = tmp_url; this.ns_allowed_regy = ns_allowed_regy; this.ns_allowed_regy_key = ns_allowed_regy_key; + } + public String Thread__name() {return "xowa.load_popup_wkr";} + public boolean Thread__resume() {return false;} + public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; + public byte[] Rslt_bry() {return rslt_bry;} private byte[] rslt_bry; + public boolean Rslt_done() {return rslt_done;} private boolean rslt_done; + public void Rslt_(byte[] bry) {this.rslt_done = true; rslt_bry = bry;} + public void Thread__exec() { + Xoae_app app = wiki.Appe(); + try { + if (itm.Canceled()) return; + cur_page.Popup_mgr().Itms().Add_if_dupe_use_nth(itm.Popup_id(), itm); + app.Html__href_parser().Parse_as_url(tmp_url, itm.Page_href(), wiki, cur_page.Ttl().Full_url()); // NOTE: use Full_url, not Page_url, else anchors won't work for non-main ns; PAGE:en.w:Project:Sandbox; DATE:2014-08-07 + if (!Xoa_url_.Tid_is_pagelike(tmp_url.Tid())) return; // NOTE: do not get popups for "file:///"; DATE:2015-04-05 + Xowe_wiki popup_wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_or_null(tmp_url.Wiki_bry()); + popup_wiki.Init_assert(); + Xoa_ttl popup_ttl = Xoa_ttl.Parse(popup_wiki, tmp_url.To_bry_page_w_anch()); + switch (popup_ttl.Ns().Id()) { + case Xow_ns_.Tid__media: + case Xow_ns_.Tid__file: + return; // do not popup for media or file + case Xow_ns_.Tid__special: + if (!Xow_special_meta_.Itm__popup_history.Match_ttl(popup_ttl)) return; // do not popup for special, unless popupHistory; DATE:2015-04-20 + break; + } + if (ns_allowed_regy.Count() > 0 && !ns_allowed_regy.Has(ns_allowed_regy_key.Val_(popup_ttl.Ns().Id()))) return; + itm.Init(popup_wiki.Domain_bry(), popup_ttl); + Xoae_page popup_page = popup_wiki.Data_mgr().Load_page_by_ttl(popup_ttl); + byte[] rv = popup_wiki.Html_mgr().Head_mgr().Popup_mgr().Parser().Parse(wiki, popup_page, cur_page.Tab_data().Tab(), itm); + Xow_popup_mgr.Update_progress_bar(app, wiki, cur_page, itm); + Rslt_(rv); + } + catch(Exception e) { + app.Usr_dlg().Warn_many("", "", "failed to get popup: href=~{0} err=~{1}", itm.Page_href(), Err_.Message_gplx_full(e)); + Rslt_(null); + } + finally { + app.Thread_mgr_old().Page_load_mgr().Resume(); + } + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_parser_tst.java b/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_parser_tst.java index 278a05a7d..fb08b56e6 100644 --- a/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_parser_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_parser_tst.java @@ -465,6 +465,7 @@ class Xop_popup_parser_fxt { parser = wiki.Html_mgr().Head_mgr().Popup_mgr().Parser(); parser.Init_by_wiki(wiki); parser.Cfg().Tmpl_read_len_(4); + parser.Cfg().Tmpl_read_max_(32 * Io_mgr.Len_kb); parser.Cfg().Ellipsis_(Bry_.Empty); parser.Cfg().Notoc_(Bry_.Empty); parser.Cfg().Show_all_if_less_than_(-1); @@ -475,7 +476,7 @@ class Xop_popup_parser_fxt { parser.Html_mkr().Output_js_clean_(false); parser.Html_mkr().Output_tidy_(false); parser.Html_mkr().Fmtr_next_sect().Fmt_(" (~{next_sect_val})"); - parser.Wrdx_mkr().Xnde_ignore_ids_(Xoapi_popups.Dflt_xnde_ignore_ids); + parser.Wrdx_mkr().Xnde_ignore_ids_(Bry_.new_a7("coordinates")); word_min = 2; } public Xop_popup_parser_fxt Init_notoc_(String v) {parser.Cfg().Notoc_(Bry_.new_u8(v)); return this;} diff --git a/400_xowa/src/gplx/xowa/htmls/portal/Xoa_available_wikis_mgr.java b/400_xowa/src/gplx/xowa/htmls/portal/Xoa_available_wikis_mgr.java index 7bdac826f..cc7064228 100644 --- a/400_xowa/src/gplx/xowa/htmls/portal/Xoa_available_wikis_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/portal/Xoa_available_wikis_mgr.java @@ -24,8 +24,8 @@ public class Xoa_available_wikis_mgr implements Gfo_invk { public Xoa_available_wikis_mgr(Xoae_app app) {this.app = app;} private Xoae_app app; public String Itms_as_html() { if (itms_as_html == null) { - String itm_cls = app.Api_root().Html().Modules().Popups().Enabled() ? " class='xowa-hover-off'" : ""; - Bry_bfr tmp_bfr = Bry_bfr_.New(); // NOTE: do not use app.Utl__bfr_mkr().Get_k004() as it is being used simultaneously by another caller; TODO_OLD: find call + String itm_cls = app.Usere().Wiki().Html_mgr().Head_mgr().Popup_mgr().Enabled() ? " class='xowa-hover-off'" : ""; // always add popup-disabled class in sidebar, even if popups aren't enabled; not worth effort to check cfg for get "current wiki"; DATE:2016-12-13 + Bry_bfr tmp_bfr = Bry_bfr_.New(); Xow_xwiki_mgr xwiki_mgr = app.Usere().Wiki().Xwiki_mgr(); xwiki_mgr.Sort_by_key(); int len = xwiki_mgr.Len();