Cfg: Convert 'Addon - Popups'

v3.3.4
gnosygnu 8 years ago
parent 42e7f5f2c6
commit 3ebc5aa2cd

@ -53,9 +53,13 @@ public class Xocfg_mgr {
cache_mgr.Sub(sub, ctx, key, key); cache_mgr.Sub(sub, ctx, key, key);
return cache_mgr.Get(ctx, 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) { 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); 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 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) { public boolean Get_bool_or(String ctx, String key, boolean or) {
@ -67,6 +71,15 @@ public class Xocfg_mgr {
return or; 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) { public int Get_int_or(String ctx, String key, int or) {
String rv = cache_mgr.Get(ctx, key); String rv = cache_mgr.Get(ctx, key);
try {return Int_.parse(rv);} try {return Int_.parse(rv);}

@ -19,7 +19,7 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gp
import gplx.langs.mustaches.*; import gplx.langs.mustaches.*;
import gplx.core.gfobjs.*; import gplx.core.gfobjs.*;
public class Xoedit_grp implements Xoedit_nde, Mustache_doc_itm { 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) { public Xoedit_grp(int id, String key, int sort) {
this.id = id; this.id = id;
this.key = key; this.key = key;
@ -28,6 +28,8 @@ public class Xoedit_grp implements Xoedit_nde, Mustache_doc_itm {
public int Id() {return id;} private final int id; public int Id() {return id;} private final int id;
public String Key() {return key;} private final String key; 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 Xoedit_itm[] Itms() {return itms;} private Xoedit_itm[] itms = new Xoedit_itm[0];
public void Itms_(Xoedit_itm[] v) {this.itms = v;} public void Itms_(Xoedit_itm[] v) {this.itms = v;}
public void Load_by_i18n(String lang, String name, String help) { public void Load_by_i18n(String lang, String name, String help) {

@ -22,7 +22,7 @@ import gplx.xowa.addons.apps.cfgs.mgrs.types.*;
public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm { public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
private int gui_type; private int gui_type;
private boolean edited; 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; private Xocfg_type_mgr type_mgr;
public Xoedit_itm(Xocfg_type_mgr type_mgr, int id, String key, int sort) { public Xoedit_itm(Xocfg_type_mgr type_mgr, int id, String key, int sort) {
this.type_mgr = type_mgr; 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 int Id() {return id;} private final int id;
public String Key() {return key;} private final String key; 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 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) { public void Load_by_meta(int scope_id, String data_type, int gui_type, String gui_args, String dflt) {
this.data_type = data_type; this.data_type = data_type;

@ -19,5 +19,6 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gp
public interface Xoedit_nde { public interface Xoedit_nde {
int Id(); int Id();
String Key(); String Key();
String Help();
void Load_by_i18n(String lang, String name, String help); void Load_by_i18n(String lang, String name, String help);
} }

@ -21,8 +21,10 @@ import gplx.core.gfobjs.*;
public class Xoedit_root implements Mustache_doc_itm { public class Xoedit_root implements Mustache_doc_itm {
private final Xoedit_nav_mgr nav_mgr; private final Xoedit_nav_mgr nav_mgr;
private final Xoedit_grp[] grps; 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.nav_mgr = nav_mgr;
this.page_help = page_help;
this.grps = grps; this.grps = grps;
} }
public Gfobj_nde To_nde() { public Gfobj_nde To_nde() {
@ -33,16 +35,18 @@ public class Xoedit_root implements Mustache_doc_itm {
Xoedit_grp itm = grps[i]; Xoedit_grp itm = grps[i];
list.Add(itm.To_nde()); 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))); rv.Add_ary("grps", new Gfobj_ary((Gfobj_nde[])list.To_ary_and_clear(Gfobj_nde.class)));
return rv; return rv;
} }
public boolean Mustache__write(String k, Mustache_bfr bfr) { public boolean Mustache__write(String k, Mustache_bfr bfr) {
if (String_.Eq(k, "page_help")) bfr.Add_str_u8(page_help);
return true; return true;
} }
public Mustache_doc_itm[] Mustache__subs(String key) { public Mustache_doc_itm[] Mustache__subs(String k) {
if (String_.Eq(key, "grps")) return grps; if (String_.Eq(k, "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(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(key, "itms")) return nav_mgr.Itms(); else if (String_.Eq(k, "itms")) return nav_mgr.Itms();
return Mustache_doc_itm_.Ary__empty; return Mustache_doc_itm_.Ary__empty;
} }
} }

@ -56,8 +56,10 @@ public class Xocfg_edit_loader {
Load_itm_data(itm_list, ctx); Load_itm_data(itm_list, ctx);
Load_i18n(grp_list, itm_list, lang); Load_i18n(grp_list, itm_list, lang);
Xoedit_nde page_nde = grp_list.Get_by_or_fail(grp_key);
grp_list.Delete_container_grps(); 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) { private Xoedit_nav_mgr Load_nav_mgr(String grp_key) {
// get grp_id // get grp_id

@ -37,13 +37,13 @@ public class Xocfg_maint_svc {
db_app.Conn().Txn_bgn("xo__cfg_maint__upsert"); db_app.Conn().Txn_bgn("xo__cfg_maint__upsert");
byte[] anch_find_bry = Bry_.new_a7("<a "), anch_repl_bry = Bry_.new_a7("<a tabindex=\"-1\" "); byte[] anch_find_bry = Bry_.new_a7("<a "), anch_repl_bry = Bry_.new_a7("<a tabindex=\"-1\" ");
for (Xocfg_maint_nde nde : ndes) { for (Xocfg_maint_nde nde : ndes) {
byte[] help = parser_mgr.Main().Parse_text_to_html(parser_mgr.Ctx(), Bry_.new_u8(nde.Help()));
help = Bry_.Replace(help, anch_find_bry, anch_repl_bry); // replace "<a " with "<a tabindex=-1 " else tabbing will go to hidden anchors in help text
if (nde.Type_is_grp()) { if (nde.Type_is_grp()) {
Xocfg_maint_svc.Create_grp(db_app, nde.Key(), nde.Owner(), nde.Name(), nde.Help()); Xocfg_maint_svc.Create_grp(db_app, nde.Key(), nde.Owner(), nde.Name(), String_.new_u8(help));
} }
else { else {
Xocfg_maint_itm itm = (Xocfg_maint_itm)nde; Xocfg_maint_itm itm = (Xocfg_maint_itm)nde;
byte[] help = parser_mgr.Main().Parse_text_to_html(parser_mgr.Ctx(), Bry_.new_u8(itm.Help()));
help = Bry_.Replace(help, anch_find_bry, anch_repl_bry); // replace "<a " with "<a tabindex=-1 " else tabbing will go to hidden anchors in help text
Xocfg_maint_svc.Create_itm(db_app, nde.Key(), nde.Owner(), nde.Name(), String_.new_u8(help), itm.Scope(), itm.Db_type(), itm.Dflt(), itm.Gui_type(), itm.Gui_args()); Xocfg_maint_svc.Create_itm(db_app, nde.Key(), nde.Owner(), nde.Name(), String_.new_u8(help), itm.Scope(), itm.Db_type(), itm.Dflt(), itm.Gui_type(), itm.Gui_args());
} }
} }

@ -21,7 +21,7 @@ class Xoh_sidebar_htmlr {
public static byte[] To_html(Bry_bfr bfr, Xowe_wiki wiki, List_adp grps) { public static byte[] To_html(Bry_bfr bfr, Xowe_wiki wiki, List_adp grps) {
Xoh_sidebar_itms_fmtr itms_fmtr = new Xoh_sidebar_itms_fmtr(); Xoh_sidebar_itms_fmtr itms_fmtr = new Xoh_sidebar_itms_fmtr();
int len = grps.Count(); int len = grps.Count();
boolean popups_enabled = wiki.Appe().Api_root().Html().Modules().Popups().Enabled(); boolean popups_enabled = wiki.Html_mgr().Head_mgr().Popup_mgr().Enabled();
for (int i = 0; i < len; ++i) { for (int i = 0; i < len; ++i) {
Xoh_sidebar_itm grp = (Xoh_sidebar_itm)grps.Get_at(i); Xoh_sidebar_itm grp = (Xoh_sidebar_itm)grps.Get_at(i);
itms_fmtr.Init_by_grp(popups_enabled, grp); itms_fmtr.Init_by_grp(popups_enabled, grp);

@ -169,7 +169,10 @@ class Xoh_sidebar_mgr_fxt {
rv.Init_by_title_and_accesskey(Bry_.new_a7(title), Bry_.new_a7(accesskey), null); rv.Init_by_title_and_accesskey(Bry_.new_a7(title), Bry_.new_a7(accesskey), null);
return rv; return rv;
} }
public Xoh_sidebar_mgr_fxt Init__popups_enabled(boolean v) {app.Api_root().Html().Modules().Popups().Enabled_(v); return this;} public Xoh_sidebar_mgr_fxt Init__popups_enabled(boolean v) {
wiki.Html_mgr().Head_mgr().Popup_mgr().Enabled_(v);
return this;
}
public Xoh_sidebar_mgr_fxt Init__msg__grp(String key, String text, String title) { public Xoh_sidebar_mgr_fxt Init__msg__grp(String key, String text, String title) {
Init_msg(key, text); Init_msg(key, text);
Init_msg("tooltip-n-" + key, title); Init_msg("tooltip-n-" + key, title);

@ -24,33 +24,6 @@ public class Xoapi_popups implements Gfo_invk, Gfo_evt_mgr_owner {
} }
public Gfo_evt_mgr Evt_mgr() {return evt_mgr;} private Gfo_evt_mgr evt_mgr; public Gfo_evt_mgr Evt_mgr() {return evt_mgr;} private Gfo_evt_mgr evt_mgr;
public void Init_by_app(Xoae_app app) {this.app = app;} public void Init_by_app(Xoae_app app) {this.app = app;}
public boolean Enabled() {return enabled;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled = true;
public int Show_init_word_count() {return show_init_word_count;} private int show_init_word_count = Dflt_show_init_word_count;
public int Show_more_word_count() {return show_more_word_count;} private int show_more_word_count = Dflt_show_more_word_count;
public int Show_all_if_less_than() {return show_all_if_less_than;} private int show_all_if_less_than = Dflt_show_all_if_less_than;
public int Win_show_delay() {return win_show_delay;} private int win_show_delay = Dflt_win_show_delay;
public int Win_hide_delay() {return win_hide_delay;} private int win_hide_delay = Dflt_win_hide_delay;
public int Win_max_w() {return win_max_w;} private int win_max_w = Dflt_win_max_w;
public int Win_max_h() {return win_max_h;} private int win_max_h = Dflt_win_max_h;
public int Win_show_all_max_w() {return win_show_all_max_w;} private int win_show_all_max_w = Dflt_win_show_all_max_w;
public boolean Win_bind_focus_blur() {return win_bind_focus_blur;} private boolean win_bind_focus_blur = Dflt_win_bind_focus_blur;
public byte[] Xnde_ignore_ids() {return xnde_ignore_ids;} private byte[] xnde_ignore_ids = Dflt_xnde_ignore_ids;
public int Scan_len() {return scan_len;} private int scan_len = Dflt_scan_len;
public int Scan_max() {return scan_max;} private int scan_max = Dflt_scan_max;
public byte[] Ns_allowed() {return ns_allowed;} private byte[] ns_allowed = Dflt_ns_allowed;
public int Read_til_stop_fwd() {return read_til_stop_fwd;} private int read_til_stop_fwd = Dflt_read_til_stop_fwd;
public int Read_til_stop_bwd() {return read_til_stop_bwd;} private int read_til_stop_bwd = Dflt_read_til_stop_bwd;
public int Stop_if_hdr_after() {return stop_if_hdr_after;} private int stop_if_hdr_after = Dflt_stop_if_hdr_after;
public int Tmpl_tkn_max() {return tmpl_tkn_max;} private int tmpl_tkn_max = Dflt_tmpl_tkn_max;
public byte[] Tmpl_keeplist() {return tmpl_keeplist;} private byte[] tmpl_keeplist = Dflt_tmpl_keeplist;
public byte[] Html_fmtr_popup() {return html_fmtr_popup;} private byte[] html_fmtr_popup = Dflt_html_fmtr_popup;
public byte[] Html_fmtr_popup_dflt() {return html_fmtr_popup_dflt;} private byte[] html_fmtr_popup_dflt = Dflt_html_fmtr_popup;
public byte[] Html_fmtr_viewed() {return html_fmtr_viewed;} private byte[] html_fmtr_viewed = Dflt_html_fmtr_viewed;
public byte[] Html_fmtr_viewed_dflt() {return html_fmtr_viewed_dflt;} private byte[] html_fmtr_viewed_dflt = Dflt_html_fmtr_viewed;
public byte[] Html_fmtr_wiki() {return html_fmtr_wiki;} private byte[] html_fmtr_wiki = Dflt_html_fmtr_wiki;
public byte[] Html_fmtr_wiki_dflt() {return html_fmtr_wiki_dflt;} private byte[] html_fmtr_wiki_dflt = Dflt_html_fmtr_wiki;
public byte[] Html_fmtr_next_sect_fmt() {return html_fmtr_next_sect;} private byte[] html_fmtr_next_sect = Dflt_html_fmtr_next_sect;
public byte[] Html_fmtr_next_sect_fmt_dflt() {return html_fmtr_next_sect_dflt;} private byte[] html_fmtr_next_sect_dflt = Dflt_html_fmtr_next_sect;
public void Show_more(String popup_id) { public void Show_more(String popup_id) {
Xowe_wiki wiki = app.Gui_mgr().Browser_win().Active_tab().Wiki(); Xowe_wiki wiki = app.Gui_mgr().Browser_win().Active_tab().Wiki();
wiki.Html_mgr().Head_mgr().Popup_mgr().Show_more(popup_id); wiki.Html_mgr().Head_mgr().Popup_mgr().Show_more(popup_id);
@ -60,183 +33,12 @@ public class Xoapi_popups implements Gfo_invk, Gfo_evt_mgr_owner {
wiki.Html_mgr().Head_mgr().Popup_mgr().Show_all(popup_id); wiki.Html_mgr().Head_mgr().Popup_mgr().Show_all(popup_id);
} }
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_enabled)) return Yn.To_str(enabled); if (ctx.Match(k, Invk_show_more)) Show_more(m.ReadStr("popup_id"));
else if (ctx.Match(k, Invk_enabled_)) enabled = m.ReadYn("v");
else if (ctx.Match(k, Invk_show_more)) Show_more(m.ReadStr("popup_id"));
else if (ctx.Match(k, Invk_show_all)) Show_all (m.ReadStr("popup_id")); else if (ctx.Match(k, Invk_show_all)) Show_all (m.ReadStr("popup_id"));
else if (ctx.Match(k, Invk_show_init_word_count)) return show_init_word_count;
else if (ctx.Match(k, Invk_show_init_word_count_)) {show_init_word_count = Set_int_gt_0(m, show_init_word_count, Evt_show_init_word_count_changed);}
else if (ctx.Match(k, Invk_show_more_word_count)) return show_more_word_count;
else if (ctx.Match(k, Invk_show_more_word_count_)) {show_more_word_count = Set_int_gt_0(m, show_more_word_count, Evt_show_more_word_count_changed);}
else if (ctx.Match(k, Invk_show_all_if_less_than)) return show_all_if_less_than;
else if (ctx.Match(k, Invk_show_all_if_less_than_)) {show_all_if_less_than = Set_int(m, show_all_if_less_than, Evt_show_all_if_less_than_changed);}
else if (ctx.Match(k, Invk_win_show_delay)) return win_show_delay;
else if (ctx.Match(k, Invk_win_show_delay_)) {win_show_delay = Set_int(m, win_show_delay, Evt_win_show_delay_changed);}
else if (ctx.Match(k, Invk_win_hide_delay)) return win_hide_delay;
else if (ctx.Match(k, Invk_win_hide_delay_)) {win_hide_delay = Set_int(m, win_hide_delay, Evt_win_hide_delay_changed);}
else if (ctx.Match(k, Invk_win_max_w)) return win_max_w;
else if (ctx.Match(k, Invk_win_max_w_)) {win_max_w = Set_int(m, win_max_w, Evt_win_max_w_changed);}
else if (ctx.Match(k, Invk_win_max_h)) return win_max_h;
else if (ctx.Match(k, Invk_win_max_h_)) {win_max_h = Set_int(m, win_max_h, Evt_win_max_h_changed);}
else if (ctx.Match(k, Invk_win_show_all_max_w)) return win_show_all_max_w;
else if (ctx.Match(k, Invk_win_show_all_max_w_)) {win_show_all_max_w = m.ReadInt("v");}
else if (ctx.Match(k, Invk_win_bind_focus_blur)) return Yn.To_str(win_bind_focus_blur);
else if (ctx.Match(k, Invk_win_bind_focus_blur_)) win_bind_focus_blur = m.ReadYn("v");
else if (ctx.Match(k, Invk_xnde_ignore_ids)) return String_.new_u8(xnde_ignore_ids);
else if (ctx.Match(k, Invk_xnde_ignore_ids_)) {xnde_ignore_ids = m.ReadBry("v"); Gfo_evt_mgr_.Pub_val(this, Evt_xnde_ignore_ids_changed, xnde_ignore_ids);}
else if (ctx.Match(k, Invk_scan_len)) return scan_len;
else if (ctx.Match(k, Invk_scan_len_)) {scan_len = Set_int_gt_0(m, scan_len, Evt_scan_len_changed);}
else if (ctx.Match(k, Invk_scan_max)) return scan_max;
else if (ctx.Match(k, Invk_scan_max_)) {scan_max = Set_int_gt_0(m, scan_max, Evt_scan_max_changed);}
else if (ctx.Match(k, Invk_read_til_stop_fwd)) return read_til_stop_fwd;
else if (ctx.Match(k, Invk_read_til_stop_fwd_)) {read_til_stop_fwd = m.ReadInt("v"); Gfo_evt_mgr_.Pub_val(this, Evt_read_til_stop_fwd_changed, read_til_stop_fwd);}
else if (ctx.Match(k, Invk_read_til_stop_bwd)) return read_til_stop_bwd;
else if (ctx.Match(k, Invk_read_til_stop_bwd_)) {read_til_stop_bwd = m.ReadInt("v"); Gfo_evt_mgr_.Pub_val(this, Evt_read_til_stop_bwd_changed, read_til_stop_bwd);}
else if (ctx.Match(k, Invk_stop_if_hdr_after)) return stop_if_hdr_after;
else if (ctx.Match(k, Invk_stop_if_hdr_after_)) {stop_if_hdr_after = m.ReadInt("v"); Gfo_evt_mgr_.Pub_val(this, Evt_stop_if_hdr_after_changed, stop_if_hdr_after);}
else if (ctx.Match(k, Invk_ns_allowed)) return String_.new_u8(ns_allowed);
else if (ctx.Match(k, Invk_ns_allowed_)) {ns_allowed = m.ReadBry("v"); Gfo_evt_mgr_.Pub_val(this, Evt_ns_allowed_changed, ns_allowed);}
else if (ctx.Match(k, Invk_tmpl_tkn_max)) return tmpl_tkn_max;
else if (ctx.Match(k, Invk_tmpl_tkn_max_)) {tmpl_tkn_max = m.ReadInt("v"); Gfo_evt_mgr_.Pub_val(this, Evt_tmpl_tkn_max_changed, tmpl_tkn_max);}
else if (ctx.Match(k, Invk_tmpl_keeplist)) return String_.new_u8(tmpl_keeplist);
else if (ctx.Match(k, Invk_tmpl_keeplist_)) {tmpl_keeplist = m.ReadBry("v"); Gfo_evt_mgr_.Pub_val(this, Evt_tmpl_keeplist_changed, tmpl_keeplist);}
else if (ctx.Match(k, Invk_html_fmtr_popup)) return String_.new_u8(html_fmtr_popup);
else if (ctx.Match(k, Invk_html_fmtr_popup_)) {html_fmtr_popup = m.ReadBry("v"); Gfo_evt_mgr_.Pub_val(this, Evt_html_fmtr_popup_changed, html_fmtr_popup);}
else if (ctx.Match(k, Invk_html_fmtr_popup_dflt)) return String_.new_u8(html_fmtr_popup_dflt);
else if (ctx.Match(k, Invk_html_fmtr_popup_dflt_)) {html_fmtr_popup_dflt = m.ReadBry("v");}
else if (ctx.Match(k, Invk_html_fmtr_viewed)) return String_.new_u8(html_fmtr_viewed);
else if (ctx.Match(k, Invk_html_fmtr_viewed_)) {html_fmtr_viewed = m.ReadBry("v"); Gfo_evt_mgr_.Pub_val(this, Evt_html_fmtr_viewed_changed, html_fmtr_viewed);}
else if (ctx.Match(k, Invk_html_fmtr_viewed_dflt)) return String_.new_u8(html_fmtr_viewed_dflt);
else if (ctx.Match(k, Invk_html_fmtr_viewed_dflt_)) {html_fmtr_viewed_dflt = m.ReadBry("v");}
else if (ctx.Match(k, Invk_html_fmtr_wiki)) return String_.new_u8(html_fmtr_wiki);
else if (ctx.Match(k, Invk_html_fmtr_wiki_)) {html_fmtr_wiki = m.ReadBry("v"); Gfo_evt_mgr_.Pub_val(this, Evt_html_fmtr_wiki_changed, html_fmtr_wiki);}
else if (ctx.Match(k, Invk_html_fmtr_wiki_dflt)) return String_.new_u8(html_fmtr_wiki_dflt);
else if (ctx.Match(k, Invk_html_fmtr_wiki_dflt_)) {html_fmtr_wiki_dflt = m.ReadBry("v");}
else if (ctx.Match(k, Invk_html_fmtr_next_sect)) return String_.new_u8(html_fmtr_next_sect);
else if (ctx.Match(k, Invk_html_fmtr_next_sect_)) {html_fmtr_next_sect = m.ReadBry("v"); Gfo_evt_mgr_.Pub_val(this, Evt_html_fmtr_next_sect_changed, html_fmtr_next_sect);}
else if (ctx.Match(k, Invk_html_fmtr_next_sect_dflt)) return String_.new_u8(html_fmtr_next_sect_dflt);
else if (ctx.Match(k, Invk_html_fmtr_next_sect_dflt_)) {html_fmtr_next_sect_dflt = m.ReadBry("v");}
else return Gfo_invk_.Rv_unhandled; else return Gfo_invk_.Rv_unhandled;
return this; return this;
} }
private int Set_int_gt_0(GfoMsg m, int cur_val, String evt) {
int tmp = m.ReadInt("v");
if (tmp < 1) return cur_val;
Gfo_evt_mgr_.Pub_val(this, evt, tmp);
return tmp;
}
private int Set_int(GfoMsg m, int cur_val, String evt) {
int tmp = m.ReadInt("v");
Gfo_evt_mgr_.Pub_val(this, evt, tmp);
return tmp;
}
private static final String private static final String
Invk_enabled = "enabled", Invk_enabled_ = "enabled_" Invk_show_more = "show_more", Invk_show_all = "show_all"
, Invk_show_init_word_count = "show_init_word_count", Invk_show_init_word_count_ = "show_init_word_count_"
, Invk_show_more_word_count = "show_more_word_count", Invk_show_more_word_count_ = "show_more_word_count_"
, Invk_show_all_if_less_than = "show_all_if_less_than", Invk_show_all_if_less_than_ = "show_all_if_less_than_"
, Invk_xnde_ignore_ids = "xnde_ignore_ids", Invk_xnde_ignore_ids_ = "xnde_ignore_ids_"
, Invk_scan_len = "scan_len", Invk_scan_len_ = "scan_len_"
, Invk_scan_max = "scan_max", Invk_scan_max_ = "scan_max_"
, Invk_show_more = "show_more", Invk_show_all = "show_all"
, Invk_html_fmtr_popup = "html_fmtr_popup" , Invk_html_fmtr_popup_ = "html_fmtr_popup"
, Invk_html_fmtr_viewed = "html_fmtr_viewed" , Invk_html_fmtr_viewed_ = "html_fmtr_viewed_"
, Invk_html_fmtr_wiki = "html_fmtr_wiki" , Invk_html_fmtr_wiki_ = "html_fmtr_wiki_"
, Invk_html_fmtr_next_sect = "html_fmtr_next_sect" , Invk_html_fmtr_next_sect_ = "html_fmtr_next_sect_"
, Invk_html_fmtr_popup_dflt = "html_fmtr_popup_dflt" , Invk_html_fmtr_popup_dflt_ = "html_fmtr_popup_dflt_"
, Invk_html_fmtr_viewed_dflt = "html_fmtr_viewed_dflt" , Invk_html_fmtr_viewed_dflt_ = "html_fmtr_viewed_dflt_"
, Invk_html_fmtr_wiki_dflt = "html_fmtr_wiki_dflt" , Invk_html_fmtr_wiki_dflt_ = "html_fmtr_wiki_dflt_"
, Invk_html_fmtr_next_sect_dflt = "html_fmtr_next_sect_dflt" , Invk_html_fmtr_next_sect_dflt_ = "html_fmtr_next_sect_dflt_"
, Invk_win_show_delay = "win_show_delay", Invk_win_show_delay_ = "win_show_delay_"
, Invk_win_hide_delay = "win_hide_delay", Invk_win_hide_delay_ = "win_hide_delay_"
, Invk_win_bind_focus_blur = "win_bind_focus_blur", Invk_win_bind_focus_blur_ = "win_bind_focus_blur_"
, Invk_win_max_w = "win_max_w", Invk_win_max_w_ = "win_max_w_"
, Invk_win_max_h = "win_max_h", Invk_win_max_h_ = "win_max_h_"
, Invk_win_show_all_max_w = "win_show_all_max_w", Invk_win_show_all_max_w_ = "win_show_all_max_w_"
, Invk_read_til_stop_fwd = "read_til_stop_fwd", Invk_read_til_stop_fwd_ = "read_til_stop_fwd_"
, Invk_read_til_stop_bwd = "read_til_stop_bwd", Invk_read_til_stop_bwd_ = "read_til_stop_bwd_"
, Invk_stop_if_hdr_after = "stop_if_hdr_after", Invk_stop_if_hdr_after_ = "stop_if_hdr_after_"
, Invk_ns_allowed = "ns_allowed", Invk_ns_allowed_ = "ns_allowed_"
, Invk_tmpl_tkn_max = "tmpl_tkn_max", Invk_tmpl_tkn_max_ = "tmpl_tkn_max_"
, Invk_tmpl_keeplist = "tmpl_keeplist", Invk_tmpl_keeplist_ = "tmpl_keeplist_"
;
public static final String
Evt_show_init_word_count_changed = "show_init_word_count_changed"
, Evt_show_more_word_count_changed = "show_more_word_count_changed"
, Evt_show_all_if_less_than_changed = "show_all_if_less_than_changed"
, Evt_win_show_delay_changed = "win_show_delay_changed"
, Evt_win_hide_delay_changed = "win_hide_delay_changed"
, Evt_win_max_w_changed = "win_max_w_changed"
, Evt_win_max_h_changed = "win_max_h_changed"
, Evt_xnde_ignore_ids_changed = "xnde_ignore_ids_changed"
, Evt_scan_len_changed = "scan_len_changed"
, Evt_scan_max_changed = "scan_max_changed"
, Evt_read_til_stop_fwd_changed = "read_til_stop_fwd_changed"
, Evt_read_til_stop_bwd_changed = "read_til_stop_bwd_changed"
, Evt_stop_if_hdr_after_changed = "stop_if_hdr_after_changed"
, Evt_ns_allowed_changed = "ns_allowed_changed"
, Evt_tmpl_tkn_max_changed = "tmpl_tkn_max_changed"
, Evt_tmpl_keeplist_changed = "tmpl_keeplist"
, Evt_html_fmtr_popup_changed = "html_fmtr_popup_changed"
, Evt_html_fmtr_viewed_changed = "html_fmtr_viewed_changed"
, Evt_html_fmtr_wiki_changed = "html_fmtr_wiki_changed"
, Evt_html_fmtr_next_sect_changed = "html_fmtr_next_sect_changed"
;
public static final byte[]
Dflt_xnde_ignore_ids = Bry_.new_a7("coordinates")
, Dflt_tmpl_keeplist = Bry_.new_a7("en.wikipedia.org|formatnum;age;age_in_days;age_in_years_and_days*;nts;number_table_sorting*;as_of;oldstyledatedy;gregorian_serial_date;currentminute;currentsecond;dmca;spaced_ndash;trim;month*;convert*;worldpop*;ipa*;lang*;nowrap*;h:*;mvar;math;vgy;audio;iso_639_name;transl;translate;linktext;zh;nihongo*;japanese_name;ko-hhrm;mp|\n")
, Dflt_html_fmtr_popup = Bry_.new_a7(String_.Concat_lines_nl_skip_last
( "<div dir=~{page_lang_ltr}>"
, " <div>~{content}"
, " </div>"
, " <hr/>"
, " <div>"
, " <span class='data_val'><b>~{page_title}</b></span>~{wiki_item}"
, " <span class='data_key'>~{<>msgs.get('api-xowa.html.modules.popups.msgs.size-name');<>}</span><span class='data_val'>~{page_size}</span>"
, " <span class='data_key'>~{<>msgs.get('api-xowa.html.modules.popups.msgs.edited-name');<>}</span><span class='data_val'>~{edit_time}</span>~{view_time_item}"
, " </div>"
, " <hr/>"
, " <div style='float:bottom;'>"
, " <span><a href='xowa-cmd:xowa.api.nav.goto(\"~{page_url}\");' title='~{<>msgs.get('api-xowa.gui.browser.url.exec-name');<>}'><img src='~{xowa_root_dir}bin/any/xowa/file/app.menu/page/open.png'></a></span>"
, " <span><a href='xowa-cmd:xowa.api.gui.browser.tabs.new_link__at_dflt__focus_y(\"~{page_url}\");' title='~{<>msgs.get('api-xowa.gui.browser.tabs.new_link__at_dflt__focus_y-name');<>}'><img src='~{xowa_root_dir}bin/any/xowa/file/app.menu/tabs/new.png'></a></span>"
, " <span><a href='xowa-cmd:xowa.api.gui.browser.tabs.new_link__at_dflt__focus_n(\"~{page_url}\");' title='~{<>msgs.get('api-xowa.gui.browser.tabs.new_link__at_dflt__focus_n-name');<>}'><img src='~{xowa_root_dir}bin/any/xowa/file/app.menu/tabs/new_background.png'></a></span>"
, " <span><a href='xowa-cmd:xowa.api.usr.bookmarks.add(\"~{page_url}\");' title='~{<>msgs.get('api-xowa.usr.bookmarks.add-name');<>}'><img src='~{xowa_root_dir}bin/any/xowa/file/app.menu/bookmarks/add.png'></a></span>"
, " <span><a href='xowa-cmd:xowa.api.html.modules.popups.show_more(\"~{popup_id}\");' title='~{<>msgs.get('api-xowa.html.modules.popups.show_more-tip');<>}'><img src='~{xowa_root_dir}bin/any/xowa/html/res/src/xowa/popups/imgs/show_more.png'></a></span>"
, " <span><a href='xowa-cmd:xowa.api.html.modules.popups.show_all (\"~{popup_id}\");' title='~{<>msgs.get('api-xowa.html.modules.popups.show_all-tip');<>}'> <img src='~{xowa_root_dir}bin/any/xowa/html/res/src/xowa/popups/imgs/show_all.png' ></a></span>"
, " <span><a href='/wiki/Special:XowaPopupHistory' title='~{<>msgs.get('api-xowa.html.modules.popups.history-tip');<>}'><img src='~{xowa_root_dir}bin/any/xowa/file/app.menu/history/show.png'></a></span>"
, " <span><a href='xowa-cmd:xowa.api.gui.browser.tabs.new_link__at_dflt__focus_y(\"home/wiki/Options/Popups\");' title='~{<>msgs.get('api-xowa.nav.cfg.main-name');<>}'><img src='~{xowa_root_dir}bin/any/xowa/file/app.menu/tools/options.png'></a></span>" // HOME
, " </div>"
, "</div>"
))
, Dflt_html_fmtr_viewed = Bry_.new_a7("\n <span class='data_key'>~{<>msgs.get('api-xowa.html.modules.popups.msgs.view_time-name');<>}</span><span class='data_val'>~{viewed_val}</span>")
, Dflt_html_fmtr_wiki = Bry_.new_a7("\n <span class='data_key'>~{<>msgs.get('api-xowa.html.modules.popups.msgs.wiki-name');<>}</span><span class='data_val'>~{wiki_val}</span>")
, Dflt_html_fmtr_next_sect = Bry_.new_a7("\n\n<span class='next_sect'>~{<>msgs.get('api-xowa.html.modules.popups.msgs.next_sect-name');<>}~{next_sect_val}</span>")
;
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
; ;
} }

@ -130,7 +130,7 @@ public class Xog_tab_itm implements Gfo_invk {
if (url.Vnt_bry() != null) Cur_vnt_(wiki, url.Vnt_bry()); if (url.Vnt_bry() != null) Cur_vnt_(wiki, url.Vnt_bry());
Tab_name_(new_tab_name); Tab_name_(new_tab_name);
usr_dlg.Prog_one("", "", "loading: ~{0}", String_.new_u8(ttl.Raw())); 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 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(); app.Thread_mgr_old().Page_load_mgr().Add_at_end(new Load_page_wkr(this, wiki, url, ttl)).Run();
} }

@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.htmls.heads; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; package gplx.xowa.htmls.heads; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*;
import gplx.xowa.guis.*; import gplx.xowa.guis.*;
import gplx.xowa.apps.apis.xowa.html.modules.*; 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 { public class Xoh_head_itm__popups extends Xoh_head_itm__base {
@Override public byte[] Key() {return Xoh_head_itm_.Key__popups;} @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;} @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); 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) { @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(); Xocfg_mgr cfg_mgr = app.Cfg();
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_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 , api_popups.Win_hide_delay()); 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 , api_popups.Win_max_w()); 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 , api_popups.Win_max_h()); 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 , api_popups.Win_show_all_max_w()); 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 , api_popups.Win_bind_focus_blur()); 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); 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) { @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_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")); 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 byte[] Css_url;
private static final byte[] private static final byte[]
Key_win_show_delay = Bry_.new_a7("popups-win-show_delay") Key_win_show_delay = Bry_.new_a7("popups-win-show_delay")
, Key_win_hide_delay = Bry_.new_a7("popups-win-hide_delay") , Key_win_hide_delay = Bry_.new_a7("popups-win-hide_delay")
, Key_win_max_w = Bry_.new_a7("popups-win-max_w") , Key_win_max_w = Bry_.new_a7("popups-win-max_w")

@ -70,7 +70,7 @@ public class Xoh_head_mgr implements gplx.core.brys.Bfr_arg {
itm__navframe.Enabled_y_(); itm__navframe.Enabled_y_();
boolean popups_enabled 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.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); itm__popups.Enabled_(popups_enabled);
return this; return this;
} }

@ -18,16 +18,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.htmls.modules.popups; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.modules.*; 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.*; import gplx.xowa.apps.apis.xowa.html.modules.*;
public class Xow_popup_cfg { 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 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 = Xoapi_popups.Dflt_scan_max; 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 = Xoapi_popups.Dflt_scan_len; 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 = Xoapi_popups.Dflt_read_til_stop_fwd; 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 = Xoapi_popups.Dflt_read_til_stop_bwd; 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 = Xoapi_popups.Dflt_stop_if_hdr_after; 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 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[] 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 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 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") , Msg_key_ellipsis = Bry_.new_a7("ellipsis")
; ;

@ -20,10 +20,10 @@ import gplx.core.brys.fmtrs.*;
import gplx.xowa.apps.apis.xowa.html.modules.*; import gplx.xowa.apps.apis.xowa.html.modules.*;
public class Xow_popup_html_mkr { public class Xow_popup_html_mkr {
private Xoae_app app; private Xowe_wiki wiki; 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_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.keys_(Xoapi_popups.Dflt_html_fmtr_viewed_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.keys_(Xoapi_popups.Dflt_html_fmtr_wiki_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.keys_(Xoapi_popups.Dflt_html_fmtr_next_sect_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_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 Output_tidy_(boolean v) {output_tidy = v;} private boolean output_tidy = true;
public void Ctor(Xoae_app app, Xowe_wiki wiki) { 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(); return wrdx_bfr.To_bry_and_clear();
} }
private static final byte[]
Dflt_html_fmtr_popup = Bry_.new_a7(String_.Concat_lines_nl_skip_last
( "<div dir=~{page_lang_ltr}>"
, " <div>~{content}"
, " </div>"
, " <hr/>"
, " <div>"
, " <span class='data_val'><b>~{page_title}</b></span>~{wiki_item}"
, " <span class='data_key'>~{<>msgs.get('api-xowa.html.modules.popups.msgs.size-name');<>}</span><span class='data_val'>~{page_size}</span>"
, " <span class='data_key'>~{<>msgs.get('api-xowa.html.modules.popups.msgs.edited-name');<>}</span><span class='data_val'>~{edit_time}</span>~{view_time_item}"
, " </div>"
, " <hr/>"
, " <div style='float:bottom;'>"
, " <span><a href='xowa-cmd:xowa.api.nav.goto(\"~{page_url}\");' title='~{<>msgs.get('api-xowa.gui.browser.url.exec-name');<>}'><img src='~{xowa_root_dir}bin/any/xowa/file/app.menu/page/open.png'></a></span>"
, " <span><a href='xowa-cmd:xowa.api.gui.browser.tabs.new_link__at_dflt__focus_y(\"~{page_url}\");' title='~{<>msgs.get('api-xowa.gui.browser.tabs.new_link__at_dflt__focus_y-name');<>}'><img src='~{xowa_root_dir}bin/any/xowa/file/app.menu/tabs/new.png'></a></span>"
, " <span><a href='xowa-cmd:xowa.api.gui.browser.tabs.new_link__at_dflt__focus_n(\"~{page_url}\");' title='~{<>msgs.get('api-xowa.gui.browser.tabs.new_link__at_dflt__focus_n-name');<>}'><img src='~{xowa_root_dir}bin/any/xowa/file/app.menu/tabs/new_background.png'></a></span>"
, " <span><a href='xowa-cmd:xowa.api.usr.bookmarks.add(\"~{page_url}\");' title='~{<>msgs.get('api-xowa.usr.bookmarks.add-name');<>}'><img src='~{xowa_root_dir}bin/any/xowa/file/app.menu/bookmarks/add.png'></a></span>"
, " <span><a href='xowa-cmd:xowa.api.html.modules.popups.show_more(\"~{popup_id}\");' title='~{<>msgs.get('api-xowa.html.modules.popups.show_more-tip');<>}'><img src='~{xowa_root_dir}bin/any/xowa/html/res/src/xowa/popups/imgs/show_more.png'></a></span>"
, " <span><a href='xowa-cmd:xowa.api.html.modules.popups.show_all (\"~{popup_id}\");' title='~{<>msgs.get('api-xowa.html.modules.popups.show_all-tip');<>}'> <img src='~{xowa_root_dir}bin/any/xowa/html/res/src/xowa/popups/imgs/show_all.png' ></a></span>"
, " <span><a href='/wiki/Special:XowaPopupHistory' title='~{<>msgs.get('api-xowa.html.modules.popups.history-tip');<>}'><img src='~{xowa_root_dir}bin/any/xowa/file/app.menu/history/show.png'></a></span>"
, " <span><a href='xowa-cmd:xowa.api.gui.browser.tabs.new_link__at_dflt__focus_y(\"home/wiki/Options/Popups\");' title='~{<>msgs.get('api-xowa.nav.cfg.main-name');<>}'><img src='~{xowa_root_dir}bin/any/xowa/file/app.menu/tools/options.png'></a></span>" // HOME
, " </div>"
, "</div>"
))
, Dflt_html_fmtr_viewed = Bry_.new_a7("\n <span class='data_key'>~{<>msgs.get('api-xowa.html.modules.popups.msgs.view_time-name');<>}</span><span class='data_val'>~{viewed_val}</span>")
, Dflt_html_fmtr_wiki = Bry_.new_a7("\n <span class='data_key'>~{<>msgs.get('api-xowa.html.modules.popups.msgs.wiki-name');<>}</span><span class='data_val'>~{wiki_val}</span>")
, Dflt_html_fmtr_next_sect = Bry_.new_a7("\n\n<span class='next_sect'>~{<>msgs.get('api-xowa.html.modules.popups.msgs.next_sect-name');<>}~{next_sect_val}</span>")
;
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_ { class Xow_popup_html_bldr_ {
public static byte[] Bld_fmtr_wiki(Bry_fmtr fmtr, Bry_bfr wrdx_bfr, byte[] wiki_domain, byte[] page_domain) { public static byte[] Bld_fmtr_wiki(Bry_fmtr fmtr, Bry_bfr wrdx_bfr, byte[] wiki_domain, byte[] page_domain) {

@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.htmls.modules.popups; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.modules.*; 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.primitives.*; import gplx.core.threads.*; import gplx.core.envs.*;
import gplx.core.js.*; import gplx.core.js.*;
import gplx.xowa.addons.apps.cfgs.*;
import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.nss.*;
import gplx.xowa.guis.views.*; import gplx.xowa.guis.views.*;
import gplx.xowa.htmls.hrefs.*; import gplx.xowa.htmls.hrefs.*;
@ -25,7 +26,7 @@ import gplx.xowa.specials.*;
import gplx.xowa.apps.apis.xowa.html.modules.*; import gplx.xowa.apps.apis.xowa.html.modules.*;
public class Xow_popup_mgr implements Gfo_invk, Gfo_evt_itm { 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 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 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; 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) { 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 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 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) { public void Init_by_wiki(Xowe_wiki wiki) {
parser.Init_by_wiki(wiki); parser.Init_by_wiki(wiki);
Xoapi_popups api_popups = app.Api_root().Html().Modules().Popups(); wiki.App().Cfg().Bind_many_wiki(this, wiki
show_init_word_count = api_popups.Show_init_word_count(); , Cfg__enabled
show_more_word_count = api_popups.Show_more_word_count(); , Cfg__show_init_word_count, Cfg__show_more_word_count
Ns_allowed_(api_popups.Ns_allowed()); , Cfg__show_all_if_less_than, Cfg__read_til_stop_fwd, Cfg__read_til_stop_bwd, Cfg__stop_if_hdr_after
parser.Cfg().Show_all_if_less_than_(api_popups.Show_all_if_less_than()); , Cfg__tmpl_tkn_max, Cfg__tmpl_keeplist
parser.Cfg().Tmpl_read_len_(api_popups.Scan_len()); , Cfg__ns_allowed, Cfg__xnde_ignore_ids, Cfg__scan_len, Cfg__scan_max
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
); );
} }
public String Show_init(int id, byte[] href, byte[] tooltip) { 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) { public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_show_popup_async)) Show_popup_async(); 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, 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, Cfg__enabled)) enabled = m.ReadYn("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, Cfg__show_init_word_count)) show_init_word_count = 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, Cfg__show_more_word_count)) show_more_word_count = m.ReadInt("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, Cfg__show_all_if_less_than)) parser.Cfg().Show_all_if_less_than_(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, Cfg__read_til_stop_fwd)) parser.Cfg().Read_til_stop_fwd_(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, Cfg__read_til_stop_bwd)) 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, Cfg__stop_if_hdr_after)) parser.Cfg().Stop_if_hdr_after_(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, Cfg__tmpl_tkn_max))
else if (ctx.Match(k, Xoapi_popups.Evt_ns_allowed_changed)) Ns_allowed_(m.ReadBry("v")); parser.Tmpl_tkn_max_(m.ReadInt("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, Cfg__tmpl_keeplist))
else if (ctx.Match(k, Xoapi_popups.Evt_tmpl_keeplist_changed)) parser.Tmpl_keeplist_init_(m.ReadBry("v")); 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, Cfg__ns_allowed))
else if (ctx.Match(k, Xoapi_popups.Evt_html_fmtr_viewed_changed)) parser.Html_mkr().Fmtr_viewed().Fmt_(m.ReadBry("v")); Ns_allowed_(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, Cfg__xnde_ignore_ids))
else if (ctx.Match(k, Xoapi_popups.Evt_html_fmtr_next_sect_changed)) parser.Html_mkr().Fmtr_next_sect().Fmt_(m.ReadBry("v")); 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; else return Gfo_invk_.Rv_unhandled;
return this; 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_more = Bry_.new_a7("more")
, Mode_show_all = Bry_.new_a7("all") , Mode_show_all = Bry_.new_a7("all")
; ;
} private static final String
class Xow_popup_mgr_ { Cfg__enabled = "xowa.addon.popups.enabled"
public static String Bld_js_cmd(Js_wtr js_wtr, String cbk, byte[] mode, byte[] href, byte[] html) { , Cfg__show_init_word_count = "xowa.addon.popups.show_init_word_count"
js_wtr.Func_init(cbk); , Cfg__show_more_word_count = "xowa.addon.popups.show_more_word_count"
js_wtr.Prm_bry(mode); , Cfg__show_all_if_less_than = "xowa.addon.popups.show_all_if_less_than"
js_wtr.Prm_bry(href); , Cfg__read_til_stop_fwd = "xowa.addon.popups.read_til_stop_fwd"
js_wtr.Prm_bry(html); , Cfg__read_til_stop_bwd = "xowa.addon.popups.read_til_stop_bwd"
js_wtr.Func_term(); , Cfg__stop_if_hdr_after = "xowa.addon.popups.stop_if_hdr_after"
return js_wtr.To_str_and_clear(); , 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"
class Load_popup_wkr implements Gfo_thread_wkr { , Cfg__xnde_ignore_ids = "xowa.addon.popups.xnde_ignore_ids"
private Xow_popup_itm itm; private Xoae_page cur_page; private Xoa_url tmp_url; , Cfg__scan_len = "xowa.addon.popups.scan_len"
private Hash_adp ns_allowed_regy; , Cfg__scan_max = "xowa.addon.popups.scan_max"
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) { public static final String
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; Cfg__win_show_delay = "xowa.addon.popups.win_show_delay"
} , Cfg__win_hide_delay = "xowa.addon.popups.win_hide_delay"
public String Thread__name() {return "xowa.load_popup_wkr";} , Cfg__win_max_w = "xowa.addon.popups.win_max_w"
public boolean Thread__resume() {return false;} , Cfg__win_max_h = "xowa.addon.popups.win_max_h"
public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; , Cfg__win_show_all_max_w = "xowa.addon.popups.win_show_all_max_w"
public byte[] Rslt_bry() {return rslt_bry;} private byte[] rslt_bry; , Cfg__win_bind_focus_blur = "xowa.addon.popups.win_bind_focus_blur"
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();
}
}
} }

@ -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 <http://www.gnu.org/licenses/>.
*/
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();
}
}
}

@ -465,6 +465,7 @@ class Xop_popup_parser_fxt {
parser = wiki.Html_mgr().Head_mgr().Popup_mgr().Parser(); parser = wiki.Html_mgr().Head_mgr().Popup_mgr().Parser();
parser.Init_by_wiki(wiki); parser.Init_by_wiki(wiki);
parser.Cfg().Tmpl_read_len_(4); parser.Cfg().Tmpl_read_len_(4);
parser.Cfg().Tmpl_read_max_(32 * Io_mgr.Len_kb);
parser.Cfg().Ellipsis_(Bry_.Empty); parser.Cfg().Ellipsis_(Bry_.Empty);
parser.Cfg().Notoc_(Bry_.Empty); parser.Cfg().Notoc_(Bry_.Empty);
parser.Cfg().Show_all_if_less_than_(-1); 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_js_clean_(false);
parser.Html_mkr().Output_tidy_(false); parser.Html_mkr().Output_tidy_(false);
parser.Html_mkr().Fmtr_next_sect().Fmt_(" (~{next_sect_val})"); 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; word_min = 2;
} }
public Xop_popup_parser_fxt Init_notoc_(String v) {parser.Cfg().Notoc_(Bry_.new_u8(v)); return this;} public Xop_popup_parser_fxt Init_notoc_(String v) {parser.Cfg().Notoc_(Bry_.new_u8(v)); return this;}

@ -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 Xoa_available_wikis_mgr(Xoae_app app) {this.app = app;} private Xoae_app app;
public String Itms_as_html() { public String Itms_as_html() {
if (itms_as_html == null) { if (itms_as_html == null) {
String itm_cls = app.Api_root().Html().Modules().Popups().Enabled() ? " class='xowa-hover-off'" : ""; 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(); // NOTE: do not use app.Utl__bfr_mkr().Get_k004() as it is being used simultaneously by another caller; TODO_OLD: find call Bry_bfr tmp_bfr = Bry_bfr_.New();
Xow_xwiki_mgr xwiki_mgr = app.Usere().Wiki().Xwiki_mgr(); Xow_xwiki_mgr xwiki_mgr = app.Usere().Wiki().Xwiki_mgr();
xwiki_mgr.Sort_by_key(); xwiki_mgr.Sort_by_key();
int len = xwiki_mgr.Len(); int len = xwiki_mgr.Len();

Loading…
Cancel
Save