mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v2.6.5.1
This commit is contained in:
Binary file not shown.
@@ -17,36 +17,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.gfui; import gplx.*;
|
||||
public interface Gxw_html extends GxwElem {
|
||||
String Html_doc_html();
|
||||
void Html_doc_html_load_by_mem(String html);
|
||||
void Html_doc_html_load_by_url(String path, String html);
|
||||
byte Html_doc_html_load_tid(); void Html_doc_html_load_tid_(byte v);
|
||||
String Html_doc_selected_get_text_or_href();
|
||||
String Html_doc_selected_get_href_or_text();
|
||||
String Html_doc_selected_get_src_or_empty();
|
||||
String Html_doc_selected_get_active_or_selection(); // gets selected anchor or highlighted text for opening a new page
|
||||
boolean Html_doc_find(String id, String find, boolean dir_fwd, boolean case_match, boolean wrap_find, boolean highlight);
|
||||
void Html_doc_body_focus();
|
||||
void Html_doc_selection_focus_toggle();
|
||||
String Html_elem_atr_get_str (String id, String atr_key);
|
||||
boolean Html_elem_atr_get_bool (String id, String atr_key);
|
||||
boolean Html_elem_atr_set (String id, String atr_key, String val);
|
||||
boolean Html_elem_atr_set_append(String id, String atr_key, String append);
|
||||
boolean Html_elem_delete(String id);
|
||||
boolean Html_elem_replace_html(String id, String html);
|
||||
boolean Html_elem_append_above(String id, String html);
|
||||
boolean Html_gallery_packed_exec();
|
||||
boolean Html_elem_focus(String id);
|
||||
boolean Html_elem_scroll_into_view(String id);
|
||||
boolean Html_elem_img_update(String id, String src, int w, int h);
|
||||
String Html_window_vpos();
|
||||
boolean Html_window_vpos_(String v);
|
||||
boolean Html_window_print_preview();
|
||||
String Html_active_atr_get_str(String atr_key, String or);
|
||||
void Html_js_enabled_(boolean v);
|
||||
void Html_js_eval_proc(String name, String... args);
|
||||
String Html_js_eval_script(String script);
|
||||
void Html_js_cbks_add(String js_func_name, GfoInvkAble invk);
|
||||
String Html_js_eval_proc_as_str (String name, Object... args);
|
||||
boolean Html_js_eval_proc_as_bool (String name, Object... args);
|
||||
String Html_js_eval_script (String script);
|
||||
void Html_js_cbks_add (String js_func_name, GfoInvkAble invk);
|
||||
void Html_invk_src_(GfoEvObj v);
|
||||
void Html_dispose();
|
||||
}
|
||||
|
||||
@@ -18,35 +18,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.gfui; import gplx.*;
|
||||
public class Gfui_html extends GfuiElemBase {
|
||||
public void Under_html_(Gxw_html v) {under = v;} private Gxw_html under;
|
||||
public String Html_doc_html() {return under.Html_doc_html();}
|
||||
public void Html_doc_html_load_by_mem(String html) {under.Html_doc_html_load_by_mem(html);}
|
||||
public void Html_doc_html_load_by_url(String path, String html) {under.Html_doc_html_load_by_url(path, html);}
|
||||
public byte Html_doc_html_load_tid() {return under.Html_doc_html_load_tid();}
|
||||
public void Html_doc_html_load_tid_(byte v) {under.Html_doc_html_load_tid_(v);}
|
||||
public String Html_doc_selected_get_text_or_href() {return under.Html_doc_selected_get_text_or_href();}
|
||||
public String Html_doc_selected_get_href_or_text() {return under.Html_doc_selected_get_href_or_text();}
|
||||
public String Html_doc_selected_get_src_or_empty() {return under.Html_doc_selected_get_src_or_empty();}
|
||||
public String Html_doc_selected_get_active_or_selection() {return under.Html_doc_selected_get_active_or_selection();}
|
||||
public boolean Html_doc_find(String elem_id, String find, boolean dir_fwd, boolean case_match, boolean wrap_find, boolean highlight_matches) {return under.Html_doc_find(elem_id, find, dir_fwd, case_match, wrap_find, highlight_matches);}
|
||||
public void Html_doc_body_focus() {under.Html_doc_body_focus();}
|
||||
public void Html_doc_selection_focus_toggle() {under.Html_doc_selection_focus_toggle();}
|
||||
@gplx.Virtual public String Html_elem_atr_get_str(String elem_id, String atr_key) {return under.Html_elem_atr_get_str(elem_id, atr_key);}
|
||||
@gplx.Virtual public boolean Html_elem_atr_get_bool(String elem_id, String atr_key) {return under.Html_elem_atr_get_bool(elem_id, atr_key);}
|
||||
public boolean Html_elem_atr_set(String elem_id, String atr_key, String v) {return under.Html_elem_atr_set(elem_id, atr_key, v);}
|
||||
public boolean Html_elem_atr_set_append(String elem_id, String atr_key, String append) {return under.Html_elem_atr_set_append(elem_id, atr_key, append);}
|
||||
public boolean Html_elem_delete(String elem_id) {return under.Html_elem_delete(elem_id);}
|
||||
public boolean Html_elem_replace_html(String id, String html) {return under.Html_elem_replace_html(id, html);}
|
||||
public boolean Html_elem_append_above(String id, String html) {return under.Html_elem_append_above(id, html);}
|
||||
public boolean Html_gallery_packed_exec() {return under.Html_gallery_packed_exec();}
|
||||
public void Html_elem_focus(String elem_id) {under.Html_elem_focus(elem_id);}
|
||||
public boolean Html_elem_scroll_into_view(String elem_id) {return under.Html_elem_scroll_into_view(elem_id);}
|
||||
public boolean Html_elem_img_update(String elem_id, String elem_src, int elem_width, int elem_height) {return under.Html_elem_img_update(elem_id, elem_src, elem_width, elem_height);}
|
||||
public String Html_window_vpos() {return under.Html_window_vpos();}
|
||||
public void Html_window_vpos_(String v) {under.Html_window_vpos_(v);}
|
||||
public boolean Html_window_print_preview() {return under.Html_window_print_preview();}
|
||||
public String Html_active_atr_get_str(String atrKey, String or) {return under.Html_active_atr_get_str(atrKey, or);}
|
||||
public void Html_js_enabled_(boolean v) {under.Html_js_enabled_(v);}
|
||||
public void Html_js_eval_proc(String name, String... args) {under.Html_js_eval_proc(name, args);}
|
||||
@gplx.Virtual public String Html_js_eval_proc_as_str(String name, Object... args) {return under.Html_js_eval_proc_as_str(name, args);}
|
||||
@gplx.Virtual public boolean Html_js_eval_proc_as_bool(String name, Object... args) {return under.Html_js_eval_proc_as_bool(name, args);}
|
||||
public String Html_js_eval_script(String script) {return under.Html_js_eval_script(script);}
|
||||
public void Html_js_cbks_add(String js_func_name, GfoInvkAble invk) {under.Html_js_cbks_add(js_func_name, invk);}
|
||||
public void Html_invk_src_(GfoEvObj v) {under.Html_invk_src_(v);}
|
||||
|
||||
@@ -1,116 +0,0 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.gfui; import gplx.*;
|
||||
import gplx.core.primitives.*;
|
||||
public class Gfui_html_cfg implements GfoInvkAble {
|
||||
public String Doc_html() {return Exec_fmt(fmtr_doc_html);} private Bry_fmtr fmtr_doc_html = Bry_fmtr.new_();
|
||||
public String Doc_body_focus() {return Exec_fmt(fmtr_doc_body_focus);} private Bry_fmtr fmtr_doc_body_focus = Bry_fmtr.new_();
|
||||
public String Doc_selection_focus_toggle() {return Exec_fmt(fmtr_doc_selection_focus_toggle);} private Bry_fmtr fmtr_doc_selection_focus_toggle = Bry_fmtr.new_();
|
||||
public String Doc_selected_get_text_or_href() {return Exec_fmt(fmtr_doc_selected_get_text_or_href);} private Bry_fmtr fmtr_doc_selected_get_text_or_href = Bry_fmtr.keys_();
|
||||
public String Doc_selected_get_href_or_text() {return Exec_fmt(fmtr_doc_selected_get_href_or_text);} private Bry_fmtr fmtr_doc_selected_get_href_or_text = Bry_fmtr.keys_();
|
||||
public String Doc_selected_get_src_or_empty() {return Exec_fmt(fmtr_doc_selected_get_src_or_empty);} private Bry_fmtr fmtr_doc_selected_get_src_or_empty = Bry_fmtr.keys_();
|
||||
public String Doc_selected_get_active_or_selection() {return Exec_fmt(fmtr_doc_selected_get_active_or_selection);} private Bry_fmtr fmtr_doc_selected_get_active_or_selection = Bry_fmtr.keys_();
|
||||
public String Doc_find_html(String find, boolean dir_fwd, boolean case_match, boolean wrap_find, boolean highlight_matches) {
|
||||
return Exec_fmt(fmtr_doc_find_html, find, Bool_.Xto_str_lower(dir_fwd), Bool_.Xto_str_lower(case_match), Bool_.Xto_str_lower(wrap_find), Bool_.Xto_str_lower(highlight_matches));
|
||||
} private Bry_fmtr fmtr_doc_find_html = Bry_fmtr.keys_("find_text", "dir_fwd", "case_match", "wrap_find", "highlight_matches");
|
||||
public String Doc_find_edit(String find, boolean dir_fwd, boolean case_match, boolean wrap_find, boolean search_text_is_diff, int prv_find_bgn) {
|
||||
return Exec_fmt(fmtr_doc_find_edit, find, Bool_.Xto_str_lower(dir_fwd), Bool_.Xto_str_lower(case_match), Bool_.Xto_str_lower(wrap_find), Bool_.Xto_str_lower(search_text_is_diff), Int_.Xto_str(prv_find_bgn));
|
||||
} private Bry_fmtr fmtr_doc_find_edit = Bry_fmtr.keys_("find_text", "dir_fwd", "case_match", "wrap_find", "find_text_is_diff", "prv_find_bgn");
|
||||
public String Elem_atr_get(String elem_id, String atr_key) {return Exec_fmt(fmtr_elem_atr_get, elem_id, atr_key);} private Bry_fmtr fmtr_elem_atr_get = Bry_fmtr.keys_("elem_id", "atr_key");
|
||||
public String Elem_atr_get_toString(String elem_id, String atr_key) {return Exec_fmt(fmtr_elem_atr_get_toString, elem_id, atr_key);} private Bry_fmtr fmtr_elem_atr_get_toString = Bry_fmtr.keys_("elem_id", "atr_key");
|
||||
public String Elem_atr_set(String elem_id, String atr_key, String atr_val) {return Exec_fmt(fmtr_elem_atr_set, elem_id, atr_key, atr_val);} private Bry_fmtr fmtr_elem_atr_set = Bry_fmtr.keys_("elem_id", "atr_key", "atr_val");
|
||||
public String Elem_atr_set_append(String elem_id, String atr_key, String atr_val) {
|
||||
return Exec_fmt(fmtr_elem_atr_set_append, elem_id, atr_key, atr_val);
|
||||
} private Bry_fmtr fmtr_elem_atr_set_append = Bry_fmtr.keys_("elem_id", "atr_key", "atr_val");
|
||||
public String Elem_delete(String elem_id) {return Exec_fmt(fmtr_elem_delete, elem_id);} private Bry_fmtr fmtr_elem_delete = Bry_fmtr.keys_("elem_id");
|
||||
public String Elem_replace_html(String id, String html) {return Exec_fmt(fmtr_elem_replace_html, id, Escape_quote(html));} private Bry_fmtr fmtr_elem_replace_html = Bry_fmtr.keys_("id", "html");
|
||||
public String Elem_append_above(String id, String html) {return Exec_fmt(fmtr_elem_append_above, id, Escape_quote(html));} private Bry_fmtr fmtr_elem_append_above = Bry_fmtr.keys_("id", "html");
|
||||
public String Gallery_packed_exec() {return Exec_fmt(fmtr_gallery_packed_exec);} private Bry_fmtr fmtr_gallery_packed_exec = Bry_fmtr.keys_();
|
||||
public String Elem_focus(String elem_id) {return Exec_fmt(fmtr_elem_focus, elem_id);} private Bry_fmtr fmtr_elem_focus = Bry_fmtr.keys_("elem_id");
|
||||
public String Elem_scroll_into_view(String elem_id) {return Exec_fmt(fmtr_elem_scroll_into_view, elem_id);} private Bry_fmtr fmtr_elem_scroll_into_view = Bry_fmtr.keys_("elem_id");
|
||||
public String Elem_img_update(String id, String src, int w, int h) {return Exec_fmt(fmtr_elem_img_update, id, src, Int_.Xto_str(w), Int_.Xto_str(h));} Bry_fmtr fmtr_elem_img_update = Bry_fmtr.keys_("elem_id", "elem_src", "elem_width", "elem_height");
|
||||
public String Window_vpos() {return Exec_fmt(fmtr_window_vpos);} private Bry_fmtr fmtr_window_vpos = Bry_fmtr.new_();
|
||||
public String Window_vpos_(String node_path, String scroll_top) {return Exec_fmt(fmtr_window_vpos_, node_path, scroll_top);} private Bry_fmtr fmtr_window_vpos_ = Bry_fmtr.keys_("node_path", "scroll_top");
|
||||
public String Window_print_preview() {return Exec_fmt(fmtr_window_print_preview);} private Bry_fmtr fmtr_window_print_preview = Bry_fmtr.keys_();
|
||||
public String Active_atr_get_str(String atr_key) {return Exec_fmt(fmtr_active_atr_get, atr_key);} private Bry_fmtr fmtr_active_atr_get = Bry_fmtr.keys_("atr_key");
|
||||
public Bry_fmtr Js_scripts_get(String name) {return (Bry_fmtr)js_scripts.Get_by(name);}
|
||||
private void Js_scripts_add(String name, String text) {
|
||||
Bry_fmtr fmtr = Bry_fmtr.new_(text);
|
||||
js_scripts.Add_if_dupe_use_nth(name, fmtr);
|
||||
} private Ordered_hash js_scripts = Ordered_hash_.new_();
|
||||
private String Exec_fmt(Bry_fmtr fmtr, String... vals) {
|
||||
if (debug_file != null) GfsCore._.ExecFile(debug_file);
|
||||
return fmtr.Bld_str_many(vals);
|
||||
} private Io_url debug_file = null;
|
||||
private static String Escape_quote(String v) {
|
||||
String rv = v;
|
||||
rv = String_.Replace(rv, "'", "\\'");
|
||||
rv = String_.Replace(rv, "\"", "\\\"");
|
||||
rv = String_.Replace(rv, "\n", "\\n");
|
||||
return rv;
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_doc_html_)) fmtr_doc_html.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_doc_body_focus_)) fmtr_doc_body_focus.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_doc_selection_focus_toggle_)) fmtr_doc_selection_focus_toggle.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_doc_selected_get_text_or_href_)) fmtr_doc_selected_get_text_or_href.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_doc_selected_get_href_or_text_)) fmtr_doc_selected_get_href_or_text.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_doc_selected_get_src_or_empty_)) fmtr_doc_selected_get_src_or_empty.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_doc_selected_get_active_or_selection_)) fmtr_doc_selected_get_active_or_selection.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_doc_find_html_)) fmtr_doc_find_html.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_doc_find_edit_)) fmtr_doc_find_edit.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_elem_atr_get_)) fmtr_elem_atr_get.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_elem_atr_get_toString_)) fmtr_elem_atr_get_toString.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_elem_atr_set_)) fmtr_elem_atr_set.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_elem_atr_set_append_)) fmtr_elem_atr_set_append.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_elem_delete_)) fmtr_elem_delete.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_elem_replace_html_)) fmtr_elem_replace_html.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_elem_append_above_)) fmtr_elem_append_above.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_gallery_packed_exec_)) fmtr_gallery_packed_exec.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_elem_focus_)) fmtr_elem_focus.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_elem_scroll_into_view_)) fmtr_elem_scroll_into_view.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_elem_img_update_)) fmtr_elem_img_update.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_elem_path_get_)) fmtr_window_vpos.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_win_print_preview_)) fmtr_window_print_preview.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_elem_path_set_)) fmtr_window_vpos_.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_doc_active_atr_get_)) fmtr_active_atr_get.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_js_scripts_add)) Js_scripts_add(m.ReadStr("name"), m.ReadStr("text"));
|
||||
else if (ctx.Match(k, Invk_debug_file_)) debug_file = m.ReadIoUrl("v");
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
public static void Html_window_vpos_parse(String v, String_obj_ref scroll_top, String_obj_ref node_path) {
|
||||
int pipe_pos = String_.FindFwd(v, "|"); if (pipe_pos == String_.Find_none) return; // if elem_get_path returns invalid value, don't fail; DATE:2014-04-05
|
||||
scroll_top.Val_(String_.Mid(v, 0, pipe_pos));
|
||||
String node_path_val = String_.Mid(v, pipe_pos + 1, String_.Len(v));
|
||||
node_path_val = "'" + String_.Replace(node_path_val, ",", "','") + "'";
|
||||
node_path.Val_(node_path_val);
|
||||
}
|
||||
public static final String Invk_debug_file_ = "debug_file_"
|
||||
, Invk_doc_html_ = "doc_html_", Invk_doc_body_focus_ = "doc_body_focus_", Invk_doc_selection_focus_toggle_ = "doc_selection_focus_toggle_"
|
||||
, Invk_doc_active_atr_get_ = "doc_active_atr_get_", Invk_doc_find_html_ = "doc_find_html_", Invk_doc_find_edit_ = "doc_find_edit_"
|
||||
, Invk_doc_selected_get_text_or_href_ = "doc_selected_get_text_or_href_", Invk_doc_selected_get_href_or_text_ = "doc_selected_get_href_or_text_", Invk_doc_selected_get_src_or_empty_ = "doc_selected_get_src_or_empty_", Invk_doc_selected_get_active_or_selection_ = "doc_selected_get_active_or_selection_"
|
||||
, Invk_win_print_preview_ = "win_print_preview_"
|
||||
, Invk_elem_atr_get_ = "elem_atr_get_", Invk_elem_atr_get_toString_ = "elem_atr_get_toString_", Invk_elem_atr_set_ = "elem_atr_set_", Invk_elem_atr_set_append_ = "elem_atr_set_append_"
|
||||
, Invk_elem_path_get_ = "elem_path_get_", Invk_elem_path_set_ = "elem_path_set_"
|
||||
, Invk_elem_focus_ = "elem_focus_", Invk_elem_scroll_into_view_ = "elem_scroll_into_view_"
|
||||
, Invk_elem_img_update_ = "elem_img_update_", Invk_elem_delete_ = "elem_delete_", Invk_elem_replace_html_ = "elem_replace_html_", Invk_elem_append_above_ = "elem_append_above_", Invk_gallery_packed_exec_ = "gallery_packed_exec_"
|
||||
, Invk_js_scripts_add = "js_scripts_add"
|
||||
, Invk_javascript_enabled_ = "javascript_enabled_"
|
||||
;
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012 gnosygnu@gmail.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.gfui; import gplx.*;
|
||||
import org.junit.*; import gplx.core.primitives.*;
|
||||
public class Gfui_html_cfg_tst {
|
||||
private Gfui_html_cfg_fxt fxt = new Gfui_html_cfg_fxt();
|
||||
@Before public void init() {fxt.Reset();}
|
||||
@Test public void Html_window_vpos_parse() {
|
||||
fxt.Test_Html_window_vpos_parse("0|0,1,2", "0", "'0','1','2'");
|
||||
fxt.Test_Html_window_vpos_parse("org.eclipse.swt.SWTException: Permission denied for <file://> to get property Selection.rangeCount", null, null); // check that invalid path doesn't fail; DATE:2014-04-05
|
||||
}
|
||||
}
|
||||
class Gfui_html_cfg_fxt {
|
||||
private String_obj_ref scroll_top = String_obj_ref.null_(), node_path = String_obj_ref.null_();
|
||||
public void Reset() {}
|
||||
public void Test_Html_window_vpos_parse(String raw, String expd_scroll_top, String expd_node_path) {
|
||||
scroll_top.Val_null_(); node_path.Val_null_();
|
||||
Gfui_html_cfg.Html_window_vpos_parse(raw, scroll_top, node_path);
|
||||
Tfds.Eq(expd_scroll_top, scroll_top.Val(), expd_scroll_top);
|
||||
Tfds.Eq(expd_node_path, node_path.Val(), expd_node_path);
|
||||
}
|
||||
}
|
||||
@@ -16,39 +16,7 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.gfui; import gplx.*;
|
||||
class Mem_html extends GxwTextMemo_lang implements Gxw_html { public String Html_doc_html() {
|
||||
return String_.Replace(this.TextVal(), "\r\n", "\n");
|
||||
}
|
||||
public String Html_doc_selected_get_sub_atr(String tag, String sub_tag, int sub_idx, String sub_atr) {return "";}
|
||||
public String Html_doc_selected_get(String host, String page) {return "";}
|
||||
public String Html_doc_selected_get_text_or_href() {return "";}
|
||||
public String Html_doc_selected_get_href_or_text() {return "";}
|
||||
public String Html_doc_selected_get_src_or_empty() {return "";}
|
||||
public String Html_doc_selected_get_active_or_selection() {return "";}
|
||||
public boolean Html_window_print_preview() {return false;}
|
||||
public void Html_invk_src_(GfoEvObj v) {}
|
||||
public String Html_elem_atr_get_str(String elem_id, String atr_key) {
|
||||
if (String_.Eq(atr_key, Gfui_html.Atr_value)) return String_.Replace(this.TextVal(), "\r\n", "\n");
|
||||
else throw Err_.unhandled(atr_key);
|
||||
}
|
||||
public Object Html_elem_atr_get_obj(String elem_id, String atr_key) {
|
||||
if (String_.Eq(atr_key, Gfui_html.Atr_value)) return String_.Replace(this.TextVal(), "\r\n", "\n");
|
||||
else throw Err_.unhandled(atr_key);
|
||||
}
|
||||
public boolean Html_elem_atr_get_bool(String elem_id, String atr_key) {
|
||||
if (String_.Eq(atr_key, Gfui_html.Atr_value)) return Bool_.parse_(String_.Replace(this.TextVal(), "\r\n", "\n"));
|
||||
else throw Err_.unhandled(atr_key);
|
||||
}
|
||||
public boolean Html_elem_atr_set(String elem_id, String atr_key, String v) {
|
||||
if (String_.Eq(atr_key, Gfui_html.Atr_value)) this.TextVal_set(v);
|
||||
else throw Err_.unhandled(atr_key);
|
||||
return true;
|
||||
}
|
||||
public boolean Html_elem_atr_set_append(String elem_id, String atr_key, String append) {
|
||||
if (String_.Eq(atr_key, Gfui_html.Atr_value)) this.TextVal_set(this.TextVal() + append);
|
||||
else throw Err_.unhandled(atr_key);
|
||||
return true;
|
||||
}
|
||||
class Mem_html extends GxwTextMemo_lang implements Gxw_html { public void Html_invk_src_(GfoEvObj v) {}
|
||||
public void Html_doc_html_load_by_mem(String s) {
|
||||
// this.Core().ForeColor_set(plainText ? ColorAdp_.Black : ColorAdp_.Gray);
|
||||
s = String_.Replace(s, "\r", "");
|
||||
@@ -62,22 +30,6 @@ class Mem_html extends GxwTextMemo_lang implements Gxw_html { public String Htm
|
||||
}
|
||||
public byte Html_doc_html_load_tid() {return html_doc_html_load_tid;} private byte html_doc_html_load_tid;
|
||||
public void Html_doc_html_load_tid_(byte v) {html_doc_html_load_tid = v;}
|
||||
public String Html_active_atr_get_str(String atrKey, String or) { // NOTE: fuzzy way of finding current href; EX: <a href="a">b</a>
|
||||
String txt = this.TextVal();
|
||||
int pos = this.SelBgn();
|
||||
String rv = ExtractAtr(atrKey, txt, pos);
|
||||
return rv == null ? or : rv;
|
||||
}
|
||||
public void Html_doc_body_focus() {}
|
||||
public void Html_doc_selection_focus_toggle() {}
|
||||
public String Html_window_vpos() {return "";}
|
||||
public boolean Html_window_vpos_(String v) {return true;}
|
||||
public boolean Html_elem_focus(String v) {return true;}
|
||||
public boolean Html_elem_img_update(String elem_id, String elem_src, int elem_width, int elem_height) {return true;}
|
||||
public boolean Html_elem_delete(String elem_id) {return true;}
|
||||
public boolean Html_elem_replace_html(String id, String html) {return true;}
|
||||
public boolean Html_elem_append_above(String id, String html) {return true;}
|
||||
public boolean Html_gallery_packed_exec() {return true;}
|
||||
public String Html_js_eval_script(String script) {return "";}
|
||||
String ExtractAtr(String key, String txt, int pos) {
|
||||
int key_pos = String_.FindBwd(txt, key, pos); if (key_pos == String_.Find_none) return null;
|
||||
@@ -86,45 +38,11 @@ class Mem_html extends GxwTextMemo_lang implements Gxw_html { public String Htm
|
||||
if (!Int_.Between(pos, q0, q1)) return null; // current pos is not between nearest quotes
|
||||
return String_.Mid(txt, q0 + 1, q1);
|
||||
}
|
||||
public boolean Html_doc_find(String elem_id, String find, boolean dir_fwd, boolean case_match, boolean wrap_find, boolean highlight_matches) {
|
||||
// String txt = this.TextVal();
|
||||
// int pos = this.SelBgn();
|
||||
// int bgn = String_.FindFwd(txt, find, pos); if (bgn == String_.Find_none) return false;
|
||||
// if (bgn == pos) {
|
||||
// bgn = String_.FindFwd(txt, find, pos + 1);
|
||||
// if (bgn == String_.Find_none) {
|
||||
// bgn = String_.FindFwd(txt, find, 0);
|
||||
// if (bgn == String_.Find_none) return false;
|
||||
// }
|
||||
// }
|
||||
// this.SelBgn_set(bgn);
|
||||
// this.SelLen_set(String_.Len(find));
|
||||
// this.ScrollTillSelectionStartIsFirstLine();
|
||||
txtFindMgr.Text_(this.TextVal());
|
||||
int cur = this.SelBgn();
|
||||
int[] ary = txtFindMgr.FindByUi(find, this.SelBgn(), this.SelLen(), false);
|
||||
if (ary[0] != cur) {
|
||||
this.SelBgn_set(ary[0]);
|
||||
this.SelLen_set(ary[1]);
|
||||
this.ScrollTillCaretIsVisible();
|
||||
}
|
||||
else {
|
||||
ary = txtFindMgr.FindByUi(find, this.SelBgn() + 1, 0, false);
|
||||
if (ary[0] != 0) {
|
||||
this.SelBgn_set(ary[0]);
|
||||
this.SelLen_set(ary[1]);
|
||||
this.ScrollTillCaretIsVisible();
|
||||
// this.ScrollTillSelectionStartIsFirstLine();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public boolean Html_elem_scroll_into_view(String id) {return false;}
|
||||
public void Html_js_enabled_(boolean v) {}
|
||||
public void Html_js_eval_proc(String proc, String... args) {}
|
||||
public String Html_js_eval_proc_as_str(String proc, Object... args) {return "not implemented by mem_html";}
|
||||
public boolean Html_js_eval_proc_as_bool(String proc, Object... args) {return false;}
|
||||
public void Html_js_cbks_add(String js_func_name, GfoInvkAble invk) {}
|
||||
public void Html_dispose() {}
|
||||
private TxtFindMgr txtFindMgr = new TxtFindMgr();
|
||||
public Mem_html() {
|
||||
this.ctor_MsTextBoxMultiline_();
|
||||
}
|
||||
|
||||
@@ -64,7 +64,6 @@ public class Swt_kit implements Gfui_kit {
|
||||
public void Kit_sync_cmd_add(Swt_gui_cmd cmd) {synchronized (thread_lock) {sync_cmd_list.Add(cmd);}}
|
||||
public void Kit_sync_cmd_del(Swt_gui_cmd cmd) {synchronized (thread_lock) {sync_cmd_list.Del(cmd);}}
|
||||
public GfoInvkAbleCmd Kit_term_cbk() {return term_cbk;} public void Kit_term_cbk_(GfoInvkAbleCmd v) {this.term_cbk = v;} private GfoInvkAbleCmd term_cbk = GfoInvkAbleCmd.Null;
|
||||
public Gfui_html_cfg Html_cfg() {return html_cfg;} private final Gfui_html_cfg html_cfg = new Gfui_html_cfg();
|
||||
public void Kit_init(Gfo_usr_dlg gui_wtr) {
|
||||
this.gui_wtr = gui_wtr;
|
||||
this.msg_wkr_stop = new Swt_msg_wkr_stop(this, gui_wtr);
|
||||
@@ -231,12 +230,11 @@ public class Swt_kit implements Gfui_kit {
|
||||
Cfg_set(type, Swt_kit.Cfg_Html_BrowserType, Cfg_Html_BrowserType_parse(val));
|
||||
}
|
||||
}
|
||||
else if (String_.Eq(k, Invk_HtmlBox)) {return html_cfg;}
|
||||
else if (String_.Eq(k, Invk_ask_file)) return this.New_dlg_file(Gfui_kit_.File_dlg_type_open, m.Args_getAt(0).Val_to_str_or_empty()).Ask();
|
||||
else if (String_.Eq(k, Invk_shell_close)) shell.close();
|
||||
return this;
|
||||
}
|
||||
public static final String Invk_Cfg_add = "Cfg_add", Invk_HtmlBox = "HtmlBox", Invk_ask_file = "ask_file"; // private or public?
|
||||
public static final String Invk_Cfg_add = "Cfg_add", Invk_ask_file = "ask_file"; // private or public?
|
||||
public static final String Invk_shell_close = "shell_close"; // public
|
||||
public static final Swt_kit _ = new Swt_kit(); private Swt_kit() {} // singleton b/c of following line "In particular, some platforms which SWT supports will not allow more than one active display" (http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/widgets/Display.html)
|
||||
public static final String Cfg_Html_BrowserType = "BrowserType";
|
||||
|
||||
@@ -74,7 +74,7 @@ class Swt_lnr_key implements KeyListener {
|
||||
IptEvtDataKey XtoKeyData(KeyEvent ev) {
|
||||
int val = ev.keyCode;
|
||||
switch (val) {
|
||||
case Byte_ascii.CarriageReturn: val = 10; break; // enter key is 13 whereas .net/swing is 10
|
||||
case Byte_ascii.Cr: val = 10; break; // enter key is 13 whereas .net/swing is 10
|
||||
case Byte_ascii.Ltr_a: case Byte_ascii.Ltr_b: case Byte_ascii.Ltr_c: case Byte_ascii.Ltr_d: case Byte_ascii.Ltr_e:
|
||||
case Byte_ascii.Ltr_f: case Byte_ascii.Ltr_g: case Byte_ascii.Ltr_h: case Byte_ascii.Ltr_i: case Byte_ascii.Ltr_j:
|
||||
case Byte_ascii.Ltr_k: case Byte_ascii.Ltr_l: case Byte_ascii.Ltr_m: case Byte_ascii.Ltr_n: case Byte_ascii.Ltr_o:
|
||||
|
||||
@@ -28,7 +28,6 @@ import org.eclipse.swt.graphics.*;
|
||||
import org.eclipse.swt.widgets.*;
|
||||
import java.security.acl.Owner;
|
||||
|
||||
import gplx.*;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.browser.*;
|
||||
import org.eclipse.swt.events.*;
|
||||
@@ -58,7 +57,6 @@ class Swt_html implements Gxw_html, Swt_control, FocusListener {
|
||||
@Override public Composite Under_composite() {return null;}
|
||||
@Override public Control Under_menu_control() {return browser;}
|
||||
public int Browser_tid() {return browser_tid;} private final int browser_tid;
|
||||
public String Html_doc_html() {return Eval_script_as_str(kit.Html_cfg().Doc_html());}
|
||||
public void Html_doc_html_load_by_mem(String html) {
|
||||
html_doc_html_load_tid = Gxw_html_load_tid_.Tid_mem;
|
||||
browser.setText(html); // DBG: Io_mgr.I.SaveFilStr(Io_url_.new_fil_("C:\\temp.txt"), s)
|
||||
@@ -70,63 +68,41 @@ class Swt_html implements Gxw_html, Swt_control, FocusListener {
|
||||
}
|
||||
public byte Html_doc_html_load_tid() {return html_doc_html_load_tid;} private byte html_doc_html_load_tid;
|
||||
public void Html_doc_html_load_tid_(byte v) {html_doc_html_load_tid = v;}
|
||||
public String Html_doc_selected_get_text_or_href() {return Eval_script_as_str(kit.Html_cfg().Doc_selected_get_text_or_href());}
|
||||
public String Html_doc_selected_get_href_or_text() {return Eval_script_as_str(kit.Html_cfg().Doc_selected_get_href_or_text());}
|
||||
public String Html_doc_selected_get_src_or_empty() {return Eval_script_as_str(kit.Html_cfg().Doc_selected_get_src_or_empty());}
|
||||
public String Html_doc_selected_get_active_or_selection() {return Eval_script_as_str(kit.Html_cfg().Doc_selected_get_active_or_selection());}
|
||||
public void Html_doc_body_focus() {Eval_script_as_exec(kit.Html_cfg().Doc_body_focus());}
|
||||
public void Html_doc_selection_focus_toggle() {Eval_script_as_exec(kit.Html_cfg().Doc_selection_focus_toggle());}
|
||||
public String Html_elem_atr_get_str(String elem_id, String atr_key) {return Eval_script_as_str(kit.Html_cfg().Elem_atr_get(elem_id, atr_key));}
|
||||
public boolean Html_elem_atr_get_bool(String elem_id, String atr_key) {return Bool_.parse_((String)Eval_script(kit.Html_cfg().Elem_atr_get_toString(elem_id, atr_key)));}
|
||||
public Object Html_elem_atr_get_obj(String elem_id, String atr_key) {return Eval_script(kit.Html_cfg().Elem_atr_get(elem_id, atr_key));}
|
||||
public boolean Html_elem_atr_set(String elem_id, String atr_key, String atr_val){return Eval_script_as_exec(kit.Html_cfg().Elem_atr_set(elem_id, atr_key, Escape_quotes(atr_val)));}
|
||||
public boolean Html_elem_atr_set_append(String elem_id, String atr_key, String atr_val)
|
||||
{return Eval_script_as_exec(kit.Html_cfg().Elem_atr_set_append(elem_id, atr_key, Escape_quotes(atr_val)));}
|
||||
public boolean Html_elem_delete(String elem_id) {return Eval_script_as_exec(kit.Html_cfg().Elem_delete(elem_id));}
|
||||
public boolean Html_elem_replace_html(String id, String html) {return Eval_script_as_exec(kit.Html_cfg().Elem_replace_html(id, html));}
|
||||
public boolean Html_elem_append_above(String id, String html) {return Eval_script_as_exec(kit.Html_cfg().Elem_append_above(id, html));}
|
||||
public boolean Html_gallery_packed_exec() {return Eval_script_as_exec(kit.Html_cfg().Gallery_packed_exec());}
|
||||
public boolean Html_elem_focus(String elem_id) {return Eval_script_as_exec(kit.Html_cfg().Elem_focus(elem_id));}
|
||||
public boolean Html_elem_scroll_into_view(String id) {return Eval_script_as_bool(kit.Html_cfg().Elem_scroll_into_view(Escape_quotes(id)));}
|
||||
public String Html_window_vpos() {return Eval_script_as_str(kit.Html_cfg().Window_vpos());}
|
||||
public boolean Html_window_print_preview() {return Eval_script_as_bool(kit.Html_cfg().Window_print_preview());}
|
||||
public void Html_js_enabled_(boolean v) {browser.setJavascriptEnabled(v);}
|
||||
public void Html_js_cbks_add(String func_name, GfoInvkAble invk) {new Swt_html_func(browser, func_name, invk);}
|
||||
public String Html_js_eval_script(String script) {return Eval_script_as_str(script);}
|
||||
public boolean Html_elem_img_update(String elem_id, String elem_src, int elem_width, int elem_height) {
|
||||
elem_src = Escape_quotes(elem_src);
|
||||
int count = 0;
|
||||
while (count < 5) {
|
||||
boolean rv = Eval_script_as_bool(kit.Html_cfg().Elem_img_update(elem_id, elem_src, elem_width, elem_height));
|
||||
if (rv) return rv;
|
||||
Thread_adp_.Sleep(100);
|
||||
count++;
|
||||
public boolean Html_js_eval_proc_as_bool(String proc, Object... args) {return Bool_.cast_(Html_js_eval_proc_as_obj(proc, args));}
|
||||
public String Html_js_eval_proc_as_str(String proc, Object... args) {return Object_.Xto_str_strict_or_null(Html_js_eval_proc_as_obj(proc, args));}
|
||||
private Object Html_js_eval_proc_as_obj(String proc, Object... args) {
|
||||
Bry_bfr bfr = Bry_bfr.new_();
|
||||
bfr.Add_str_a7("return ").Add_str_u8(proc).Add_byte(Byte_ascii.Paren_bgn);
|
||||
int args_len = args.length;
|
||||
for (int i = 0; i < args_len; ++i) {
|
||||
Object arg = args[i];
|
||||
if (i != 0) bfr.Add_byte(Byte_ascii.Comma);
|
||||
boolean quote_val = true;
|
||||
if ( ClassAdp_.Eq_typeSafe(arg, Bool_.Cls_ref_type)
|
||||
|| ClassAdp_.Eq_typeSafe(arg, Int_.Cls_ref_type)
|
||||
|| ClassAdp_.Eq_typeSafe(arg, Long_.Cls_ref_type)
|
||||
) {
|
||||
quote_val = false;
|
||||
}
|
||||
if (quote_val) bfr.Add_byte(Byte_ascii.Apos);
|
||||
if (quote_val)
|
||||
bfr.Add_str_u8(Escape_quote(Object_.Xto_str_strict_or_null_mark(arg)));
|
||||
else
|
||||
bfr.Add_obj_strict(arg);
|
||||
if (quote_val) bfr.Add_byte(Byte_ascii.Apos);
|
||||
}
|
||||
return false;
|
||||
bfr.Add_byte(Byte_ascii.Paren_end).Add_byte(Byte_ascii.Semic);
|
||||
return Eval_script(bfr.Xto_str_and_clear());
|
||||
}
|
||||
public String Html_active_atr_get_str(String atr_key, String or) {
|
||||
Object rv_obj = Eval_script(kit.Html_cfg().Active_atr_get_str(atr_key));
|
||||
String rv = (String)rv_obj;
|
||||
return rv == null || !eval_rslt.Result_pass() ? or : rv;
|
||||
}
|
||||
public void Html_js_eval_proc(String proc, String... args) {
|
||||
Bry_fmtr fmtr = kit.Html_cfg().Js_scripts_get(proc);
|
||||
String script = fmtr.Bld_str_many(args);
|
||||
Eval_script(script);
|
||||
}
|
||||
public boolean Html_window_vpos_(String v) {
|
||||
Gfui_html_cfg.Html_window_vpos_parse(v, scroll_top, node_path);
|
||||
return Eval_script_as_exec(kit.Html_cfg().Window_vpos_(node_path.Val(), scroll_top.Val()));
|
||||
} private String_obj_ref scroll_top = String_obj_ref.null_(), node_path = String_obj_ref.null_();
|
||||
public boolean Html_doc_find(String elem_id, String find, boolean dir_fwd, boolean case_match, boolean wrap_find, boolean highlight_matches) {
|
||||
// if (String_.Eq(find, String_.Empty)) return false;
|
||||
find = String_.Replace(find, "\\", "\\\\"); // escape \ -> \\
|
||||
find = String_.Replace(find, "'", "\\'"); // escape ' -> \'; NOTE: \\' instead of \'
|
||||
String script = String_.Eq(elem_id, Gfui_html.Elem_id_body)
|
||||
? kit.Html_cfg().Doc_find_html(find, dir_fwd, case_match, wrap_find, highlight_matches)
|
||||
: kit.Html_cfg().Doc_find_edit(find, dir_fwd, case_match, wrap_find, false, -1);
|
||||
Eval_script(script);
|
||||
return true;
|
||||
private static String Escape_quote(String v) {
|
||||
String rv = v;
|
||||
rv = String_.Replace(rv, "'", "\\'");
|
||||
rv = String_.Replace(rv, "\"", "\\\"");
|
||||
rv = String_.Replace(rv, "\n", "\\n");
|
||||
return rv;
|
||||
}
|
||||
public void Html_invk_src_(GfoEvObj invk) {lnr_location.Host_set(invk); lnr_status.Host_set(invk);}
|
||||
public void Html_dispose() {
|
||||
@@ -136,18 +112,12 @@ class Swt_html implements Gxw_html, Swt_control, FocusListener {
|
||||
}
|
||||
private GfuiElem delete_owner, delete_cur;
|
||||
public void Delete_elems_(GfuiElem delete_owner, GfuiElem delete_cur) {this.delete_owner = delete_owner; this.delete_cur = delete_cur;} // HACK: set owner / cur so delete can work;
|
||||
private String Escape_quotes(String v) {return String_.Replace(String_.Replace(v, "'", "\\'"), "\"", "\\\"");}
|
||||
@Override public GxwCore_base Core() {return core;} private GxwCore_base core;
|
||||
@Override public GxwCbkHost Host() {return host;} @Override public void Host_set(GxwCbkHost host) {this.host = host;} GxwCbkHost host;
|
||||
@Override public String TextVal() {return browser.getText();}
|
||||
@Override public void TextVal_set(String v) {browser.setText(v);}
|
||||
@Override public void EnableDoubleBuffering() {}
|
||||
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {return GfoInvkAble_.Rv_unhandled;}
|
||||
private boolean Eval_script_as_bool(String script) {
|
||||
Object result_obj = Eval_script(script);
|
||||
return eval_rslt.Result_pass() && Bool_.cast_or_(result_obj, false);
|
||||
}
|
||||
private boolean Eval_script_as_exec(String script) {Eval_script(script); return eval_rslt.Result_pass();}
|
||||
private String Eval_script_as_str(String script) {return (String)Eval_script(script);}
|
||||
public Object Eval_script(String script) {
|
||||
eval_rslt.Clear();
|
||||
|
||||
Reference in New Issue
Block a user