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

Cfg: Convert 'Addon - Popups'

This commit is contained in:
gnosygnu
2016-12-13 21:42:48 -05:00
parent 42e7f5f2c6
commit 3ebc5aa2cd
19 changed files with 235 additions and 339 deletions

View File

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

View File

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

View File

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

View File

@@ -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
( "<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_ {
public static byte[] Bld_fmtr_wiki(Bry_fmtr fmtr, Bry_bfr wrdx_bfr, byte[] wiki_domain, byte[] page_domain) {

View File

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

View File

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

View File

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

View File

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