mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
Embeddable: Create core dbs in proper subdirectory
This commit is contained in:
@@ -13,186 +13,3 @@ The terms of each license can be found in the source code repository:
|
||||
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
|
||||
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
|
||||
*/
|
||||
package gplx.xowa.htmls.js; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*;
|
||||
import gplx.core.threads.*; import gplx.xowa.xtns.pfuncs.ifs.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
import gplx.langs.jsons.*;
|
||||
import gplx.xowa.htmls.js.*;
|
||||
import gplx.xowa.guis.views.*;
|
||||
import gplx.xowa.parsers.*;
|
||||
public class Xoh_js_cbk implements Gfo_invk {
|
||||
private Xoae_app app;
|
||||
private Xog_html_itm html_itm;
|
||||
private Xop_root_tkn root = new Xop_root_tkn();
|
||||
private final Bry_bfr bfr = Bry_bfr_.Reset(255);
|
||||
public Xoh_js_cbk(Xog_html_itm html_itm) {this.html_itm = html_itm; this.app = html_itm.Owner_tab().Tab_mgr().Win().App();}
|
||||
private String Xowa_exec_test(GfoMsg m) { // concat args with pipe; EX: xowa_exec('proc', 'arg0', 'arg1'); -> proc|arg0|arg1
|
||||
bfr.Clear();
|
||||
bfr.Add_str_u8(m.Key());
|
||||
int len = m.Args_count();
|
||||
for (int i = 0; i < len; i++)
|
||||
bfr.Add_str_a7("|").Add_str_u8(m.Args_getAt(i).Val_to_str_or_empty());
|
||||
return bfr.To_str_and_clear();
|
||||
}
|
||||
private String[] Xowa_exec_test_as_array(GfoMsg m) {// return args as array; EX: xowa_exec('proc', 'arg0', 'arg1'); -> proc,arg0,arg1
|
||||
bfr.Clear();
|
||||
int len = m.Args_count();
|
||||
String[] rv = new String[len + 1];
|
||||
rv[0] = Invk_xowa_exec_test_as_array;
|
||||
for (int i = 0; i < len; i++)
|
||||
rv[i + 1] = Object_.Xto_str_strict_or_empty(m.ReadValAt(i));
|
||||
return rv;
|
||||
}
|
||||
private String Parse_to_html(GfoMsg m) {
|
||||
Xowe_wiki wiki = html_itm.Owner_tab().Wiki();
|
||||
Xop_ctx ctx = wiki.Parser_mgr().Ctx();
|
||||
boolean old_para_enabled = ctx.Para().Enabled();
|
||||
byte[] raw = Bry_.new_u8(m.Args_getAt(0).Val_to_str_or_empty());
|
||||
boolean para_enabled = m.Args_count() < 2 ? false : Bool_.Parse(m.Args_getAt(1).Val_to_str_or_empty());
|
||||
try {
|
||||
ctx.Para().Enabled_(para_enabled);
|
||||
wiki.Parser_mgr().Main().Parse_text_to_wdom(root, ctx, ctx.Tkn_mkr(), raw, 0);
|
||||
byte[] data = root.Data_mid();
|
||||
wiki.Html_mgr().Html_wtr().Write_doc(bfr, ctx, data, root);
|
||||
return bfr.To_str_and_clear();
|
||||
}
|
||||
finally {
|
||||
ctx.Para().Enabled_(old_para_enabled);
|
||||
}
|
||||
}
|
||||
private String Get_page(GfoMsg m) {
|
||||
Xowe_wiki wiki = html_itm.Owner_tab().Wiki();
|
||||
try {
|
||||
Xoa_ttl ttl = Xoa_ttl.Parse(wiki, m.Args_getAt(0).Val_to_bry());
|
||||
Xoae_page page = wiki.Data_mgr().Load_page_by_ttl(ttl);
|
||||
return String_.new_u8(page.Db().Text().Text_bry());
|
||||
} catch (Exception e) {Err_.Noop(e); return null;}
|
||||
}
|
||||
private String Popups_get_async_bgn(GfoMsg m) {
|
||||
try {
|
||||
byte[] js_cbk = m.Args_getAt(0).Val_to_bry();
|
||||
byte[] href_bry = m.Args_getAt(1).Val_to_bry();
|
||||
return html_itm.Owner_tab().Wiki().Html_mgr().Head_mgr().Popup_mgr().Get_async_bgn(js_cbk, href_bry);
|
||||
} catch (Exception e) {Err_.Noop(e); return null;}
|
||||
}
|
||||
private String Popups_get_html(GfoMsg m) {
|
||||
try {
|
||||
int popups_id = Int_.By_double(Double_.cast(m.Args_getAt(0).Val()));
|
||||
byte[] href_bry = m.Args_getAt(1).Val_to_bry();
|
||||
byte[] tooltip_bry = m.Args_getAt(2).Val_to_bry();
|
||||
return html_itm.Owner_tab().Wiki().Html_mgr().Head_mgr().Popup_mgr().Show_init(popups_id, href_bry, tooltip_bry);
|
||||
} catch (Exception e) {Err_.Noop(e); return null;}
|
||||
}
|
||||
private String[] Get_title_meta(Xowe_wiki wiki, byte[] ttl_bry) {
|
||||
synchronized (tmp_page) {
|
||||
tmp_page.Clear();
|
||||
Xoa_ttl ttl = Xoa_ttl.Parse(wiki, ttl_bry);
|
||||
wiki.Db_mgr().Load_mgr().Load_by_ttl(tmp_page, ttl.Ns(), ttl.Page_db());
|
||||
}
|
||||
return String_.Ary(tmp_page.Exists() ? "1" : "0", Int_.To_str(tmp_page.Id()), Int_.To_str(tmp_page.Ns_id()), String_.new_u8(tmp_page.Ttl_page_db()), Bool_.To_str_lower(tmp_page.Redirected()), tmp_page.Modified_on().XtoStr_fmt("yyyy-MM-dd HH:mm:ss"), Int_.To_str(tmp_page.Text_len()));
|
||||
} private static final Xowd_page_itm tmp_page = Xowd_page_itm.new_tmp();
|
||||
private String[][] Get_titles_meta(GfoMsg m) {
|
||||
Xowe_wiki wiki = html_itm.Owner_tab().Wiki();
|
||||
try {
|
||||
byte[][] ttls = Bry_split_.Split(Bry_.new_u8((String)m.ReadValAt(0)), Byte_ascii.Nl);
|
||||
int ttls_len = ttls.length;
|
||||
String[][] rv = new String[ttls_len][];
|
||||
for (int i = 0; i < ttls_len; i++) {
|
||||
byte[] ttl = ttls[i];
|
||||
rv[i] = Get_title_meta(wiki, ttl);
|
||||
}
|
||||
return rv;
|
||||
} catch (Exception e) {Err_.Noop(e); return null;}
|
||||
}
|
||||
private boolean Get_title_exists(Xowe_wiki wiki, byte[] ttl) {
|
||||
return Pfunc_ifexist.Exists(wiki, ttl);
|
||||
}
|
||||
private String[] Get_titles_exists(GfoMsg m) {
|
||||
Xowe_wiki wiki = html_itm.Owner_tab().Wiki();
|
||||
try {
|
||||
byte[][] ttls = Bry_.Ary_obj((Object[])m.ReadValAt(0));
|
||||
int ttls_len = ttls.length;
|
||||
String[] rv = new String[ttls_len];
|
||||
for (int i = 0; i < ttls_len; i++) {
|
||||
byte[] ttl = ttls[i];
|
||||
rv[i] = Get_title_exists(wiki, ttl) ? "1" : "0";
|
||||
}
|
||||
return rv;
|
||||
} catch (Exception e) {Err_.Noop(e); return null;}
|
||||
}
|
||||
private String Get_search_suggestions(GfoMsg m) {
|
||||
Xowe_wiki wiki = html_itm.Owner_tab().Wiki();
|
||||
byte[] search_str = Bry_.new_u8((String)m.ReadValAt(0));
|
||||
byte[] cbk_func = Bry_.new_u8((String)m.ReadValAt(1));
|
||||
app.Addon_mgr().Itms__search__htmlbar().Search(wiki, search_str, cbk_func);
|
||||
return "";
|
||||
}
|
||||
private String[] Wikidata_get_label(GfoMsg m) {
|
||||
try {
|
||||
Thread_adp_.Sleep(10); // slow down calls to prevent random crashing in XulRunner; DATE:2014-04-23
|
||||
gplx.xowa.xtns.wbases.Wdata_wiki_mgr wdata_mgr = app.Wiki_mgr().Wdata_mgr();
|
||||
wdata_mgr.Wdata_wiki().Init_assert(); // NOTE: must assert else ns_mgr won't load Property
|
||||
int len = m.Args_count();
|
||||
if (len < 1) return null;
|
||||
byte[][] langs = Bry_split_.Split(m.Args_getAt(0).Val_to_bry(), Byte_ascii.Semic);
|
||||
int langs_len = langs.length;
|
||||
String[] rv = new String[len - 1];
|
||||
for (int i = 1; i < len; i++) {
|
||||
try {
|
||||
byte[] ttl_bry = m.Args_getAt(i).Val_to_bry();
|
||||
gplx.xowa.xtns.wbases.Wdata_doc page = wdata_mgr.Doc_mgr.Get_by_xid_or_null(ttl_bry); if (page == null) continue;
|
||||
for (int j = 0; j < langs_len; j++) {
|
||||
byte[] lang_key = langs[j];
|
||||
if (Bry_.Eq(lang_key, Wikidata_get_label_xowa_ui_lang))
|
||||
lang_key = app.Sys_cfg().Lang();
|
||||
byte[] val_bry = null;
|
||||
if (Bry_.Eq(lang_key, Wikidata_get_label_xowa_title))
|
||||
val_bry = ttl_bry;
|
||||
else {
|
||||
val_bry = page.Label_list__get(lang_key);
|
||||
}
|
||||
if (val_bry == null) continue;
|
||||
rv[i - 1] = String_.new_u8(val_bry);
|
||||
break;
|
||||
}
|
||||
} catch (Exception e) {Err_.Noop(e); rv[i] = null;}
|
||||
finally {}
|
||||
}
|
||||
return rv;
|
||||
} catch (Exception e) {Err_.Noop(e); return null;}
|
||||
}
|
||||
private String Scripts_exec(GfoMsg m) {
|
||||
Object rv = null;
|
||||
try {
|
||||
rv = app.Gfs_mgr().Run_str(m.Args_getAt(0).Val_to_str_or_empty());
|
||||
}
|
||||
catch (Exception e) {Err_.Noop(e); return null;}
|
||||
return Object_.Xto_str_strict_or_empty(rv);
|
||||
}
|
||||
private static final byte[] Wikidata_get_label_xowa_ui_lang = Bry_.new_a7("xowa_ui_lang"), Wikidata_get_label_xowa_title = Bry_.new_a7("xowa_title");
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_parse_to_html)) return Parse_to_html(m);
|
||||
else if (ctx.Match(k, Invk_wikidata_get_label)) return Wikidata_get_label(m);
|
||||
else if (ctx.Match(k, Invk_get_page)) return Get_page(m);
|
||||
else if (ctx.MatchIn(k, Invk_cmd, Invk_scripts_exec)) return Scripts_exec(m);
|
||||
else if (ctx.Match(k, Invk_scripts_exec)) return Scripts_exec(m);
|
||||
else if (ctx.Match(k, Invk_popups_get_async_bgn)) return Popups_get_async_bgn(m);
|
||||
else if (ctx.Match(k, Invk_popups_get_html)) return Popups_get_html(m);
|
||||
else if (ctx.Match(k, Invk_get_search_suggestions)) return Get_search_suggestions(m);
|
||||
else if (ctx.Match(k, Invk_get_titles_meta)) return Get_titles_meta(m);
|
||||
else if (ctx.Match(k, Invk_get_titles_exists)) return Get_titles_exists(m);
|
||||
else if (ctx.Match(k, Invk_get_current_url)) return String_.new_u8(html_itm.Owner_tab().Page().Url().Raw());
|
||||
else if (ctx.Match(k, Invk_xowa_exec_test)) return Xowa_exec_test(m);
|
||||
else if (ctx.Match(k, Invk_xowa_exec_test_as_array)) return Xowa_exec_test_as_array(m);
|
||||
else if (ctx.Match(k, Invk_exec_json)) return app.Html__bridge_mgr().Cmd_mgr().Exec(m);
|
||||
else if (ctx.Match(k, Invk_bldr_exec)) return app.Bldr().Exec_json((String)m.ReadValAt(0));
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
}
|
||||
public static final String Invk_parse_to_html = "parse_to_html", Invk_wikidata_get_label = "wikidata_get_label", Invk_get_page = "get_page", Invk_cmd = "cmd", Invk_scripts_exec = "scripts_exec"
|
||||
, Invk_get_search_suggestions = "get_search_suggestions", Invk_get_titles_meta = "get_titles_meta", Invk_get_titles_exists = "get_titles_exists", Invk_get_current_url = "get_current_url"
|
||||
, Invk_xowa_exec_test = "xowa_exec_test", Invk_xowa_exec_test_as_array = "xowa_exec_test_as_array"
|
||||
, Invk_popups_get_async_bgn = "popups_get_async_bgn"
|
||||
, Invk_popups_get_html = "popups_get_html"
|
||||
, Invk_exec_json = "exec_json"
|
||||
, Invk_bldr_exec = "bldr_exec"
|
||||
;
|
||||
}
|
||||
|
||||
@@ -13,32 +13,3 @@ The terms of each license can be found in the source code repository:
|
||||
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
|
||||
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
|
||||
*/
|
||||
package gplx.xowa.htmls.js; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*;
|
||||
import org.junit.*; import gplx.xowa.xtns.wbases.*;
|
||||
import gplx.xowa.guis.views.*;
|
||||
public class Xoh_js_cbk_tst {
|
||||
@Before public void init() {fxt.Clear();} private Xoh_js_cbk_fxt fxt = new Xoh_js_cbk_fxt();
|
||||
@Test public void Get_title() {
|
||||
fxt.Fxt().Init_page_create("exists");
|
||||
fxt.Test_get_title("exists", "1" , "0" , Int_.To_str(Int_.Min_value), "Exists", "false", "0001-01-01 00:00:00", "0");
|
||||
fxt.Test_get_title("absent", "0", "-1", Int_.To_str(Int_.Min_value), null , "false", "0001-01-01 00:00:00", "0");
|
||||
}
|
||||
}
|
||||
class Xoh_js_cbk_fxt {
|
||||
public void Clear() {
|
||||
fxt = new Xop_fxt();
|
||||
Xoa_app_fxt.Init_gui(fxt.App(), fxt.Wiki());
|
||||
} private Xop_fxt fxt;
|
||||
public Xop_fxt Fxt() {return fxt;}
|
||||
public void Test_get_title(String ttl, Object... expd) {
|
||||
Xoae_app app = fxt.App();
|
||||
Xowe_wiki wiki = fxt.Wiki();
|
||||
Xoae_page page = Xoae_page.New_test(wiki, Xoa_ttl.Parse(wiki, Bry_.new_a7("mock_page")));
|
||||
Xog_tab_itm tab = app.Gui_mgr().Browser_win().Active_tab();
|
||||
tab.Page_(page);
|
||||
Xoh_js_cbk exec = tab.Html_itm().Js_cbk();
|
||||
GfoMsg msg = GfoMsg_.new_cast_(Xoh_js_cbk.Invk_get_titles_meta).Add("ttl", ttl);
|
||||
String[][] actl = (String[][])Gfo_invk_.Invk_by_msg(exec, Xoh_js_cbk.Invk_get_titles_meta, msg);
|
||||
Tfds.Eq_ary_str(expd, actl[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,49 +13,3 @@ The terms of each license can be found in the source code repository:
|
||||
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
|
||||
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
|
||||
*/
|
||||
package gplx.xowa.htmls.js; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*;
|
||||
import org.junit.*; import gplx.langs.jsons.*; import gplx.xowa.xtns.wbases.*;
|
||||
public class Xoh_js_cbk_wdata_labels_tst {
|
||||
@Before public void init() {fxt.Init();} private final Wdata_wiki_mgr_fxt fxt = new Wdata_wiki_mgr_fxt();
|
||||
@Test public void Basic() {
|
||||
fxt.Init__docs__add(fxt.Wdoc_bldr("q1").Add_label("en", "en_q1").Xto_wdoc());
|
||||
fxt.Init__docs__add(fxt.Wdoc_bldr("q2").Add_label("en", "en_q2").Xto_wdoc());
|
||||
fxt.Init__docs__add(fxt.Wdoc_bldr("Property:P1").Add_label("en", "en_property_p1").Xto_wdoc());
|
||||
Tst_wikidata_label_get(String_.Ary("en", "q1", "q2", "Property:P1"), String_.Ary("en_q1", "en_q2", "en_property_p1"));
|
||||
}
|
||||
@Test public void Outliers() {
|
||||
fxt.Init__docs__add(fxt.Wdoc_bldr("q1").Add_label("en", "en_q1").Add_label("de", "de_q1").Xto_wdoc());
|
||||
Tst_wikidata_label_get(String_.Ary("fr", "q1"), String_.Ary((String)null));
|
||||
Tst_wikidata_label_get(String_.Ary("de", "q1"), String_.Ary("de_q1"));
|
||||
Tst_wikidata_label_get(String_.Ary("xowa_title", "q1"), String_.Ary("q1"));
|
||||
Tst_wikidata_label_get(String_.Ary("xowa_ui_lang", "q1"), String_.Ary("en_q1"));
|
||||
Tst_wikidata_label_get(String_.Ary("fr;de", "q1"), String_.Ary("de_q1"));
|
||||
}
|
||||
@Test public void Escaped() { // PURPOSE: \t should be escaped; EX:wd.q:2; DATE:2014-04-23
|
||||
Wdata_doc d = doc_("q1", String_.Concat_lines_nl
|
||||
( "{ 'entity':['item',1]"
|
||||
, ", 'label':"
|
||||
, " { 'en':'\\ta'" // NOTE: json literally has "\t", not (char)8
|
||||
, " }"
|
||||
, "}"
|
||||
));
|
||||
fxt.Init__docs__add(d);
|
||||
Tst_wikidata_label_get(String_.Ary("en", "q1"), String_.Ary("\ta"));
|
||||
}
|
||||
private Wdata_doc doc_(String qid, String src) {
|
||||
Json_doc jdoc = fxt.Make_json(src);
|
||||
Xoae_app app = Xoa_app_fxt.Make__app__edit();
|
||||
Wdata_doc rv = new Wdata_doc(Bry_.new_a7(qid), app.Wiki_mgr().Wdata_mgr(), jdoc);
|
||||
return rv;
|
||||
}
|
||||
private void Tst_wikidata_label_get(String[] args, String[] expd) {
|
||||
Xoa_app_fxt.Init_gui(fxt.App(), fxt.Wiki());
|
||||
Xoh_js_cbk exec = fxt.App().Gui_mgr().Browser_win().Active_html_itm().Js_cbk();
|
||||
GfoMsg msg = GfoMsg_.new_cast_(Xoh_js_cbk.Invk_wikidata_get_label);
|
||||
int args_len = args.length;
|
||||
for (int i = 0; i < args_len; i++)
|
||||
msg.Add("v", args[i]);
|
||||
String[] actl = (String[])Gfo_invk_.Invk_by_msg(exec, Xoh_js_cbk.Invk_wikidata_get_label, msg);
|
||||
Tfds.Eq_ary_str(expd, actl);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,190 +13,3 @@ The terms of each license can be found in the source code repository:
|
||||
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
|
||||
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
|
||||
*/
|
||||
package gplx.xowa.htmls.js; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*;
|
||||
import gplx.core.btries.*;
|
||||
import gplx.langs.htmls.entitys.*;
|
||||
public class Xoh_js_cleaner {
|
||||
private Xoae_app app; private boolean ctor = true;
|
||||
public Xoh_js_cleaner(Xoae_app app) {this.app = app;}
|
||||
public void Clean_bfr(Xowe_wiki wiki, Xoa_ttl ttl, Bry_bfr bfr, int bgn) {
|
||||
int end = bfr.Len();
|
||||
byte[] cleaned = this.Clean(wiki, bfr.Bfr(), bgn, end);
|
||||
if (cleaned != null) {
|
||||
bfr.Del_by(end - bgn);
|
||||
bfr.Add(cleaned);
|
||||
app.Usr_dlg().Log_many("", "", "javascript detected: wiki=~{0} ~{1}", wiki.Domain_str(), String_.new_u8(ttl.Full_txt_w_ttl_case()));
|
||||
}
|
||||
}
|
||||
public byte[] Clean(Xowe_wiki wiki, byte[] src, int bgn, int end) {
|
||||
if (ctor) Ctor();
|
||||
Bry_bfr bfr = null;
|
||||
boolean dirty = false;
|
||||
try {
|
||||
bfr = wiki.Utl__bfr_mkr().Get_m001();
|
||||
int pos = bgn;
|
||||
while (pos < end) {
|
||||
byte b = src[pos];
|
||||
Object o = trie.Match_bgn_w_byte(b, src, pos, end);
|
||||
if (o == null) {
|
||||
if (dirty)
|
||||
bfr.Add_byte(b);
|
||||
++pos;
|
||||
}
|
||||
else {
|
||||
byte[] frag = (byte[])o;
|
||||
int frag_len = frag.length;
|
||||
if (frag[0] == Byte_ascii.Lt) { // jscript node; EX: <script
|
||||
if (!dirty) {bfr.Add_mid(src, bgn, pos); dirty = true;}
|
||||
bfr.Add(Gfh_entity_.Lt_bry);
|
||||
bfr.Add_mid(frag, 1, frag.length);
|
||||
pos += frag_len;
|
||||
}
|
||||
else { // jscript attribue; EX: onmouseover
|
||||
int atr_pos = Get_pos_eq(src, pos, end, frag_len);
|
||||
if (atr_pos == -1) // false match; EX: "onSelectNotJs=3"; "regionSelect=2"
|
||||
pos += frag_len;
|
||||
else {
|
||||
if (!dirty) {bfr.Add_mid(src, bgn, pos); dirty = true;}
|
||||
bfr.Add(frag);
|
||||
bfr.Add(Gfh_entity_.Eq_bry);
|
||||
pos = atr_pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} finally {if (bfr != null) bfr.Mkr_rls();}
|
||||
return dirty ? bfr.To_bry_and_clear() : null;
|
||||
}
|
||||
private int Get_pos_eq(byte[] src, int pos, int end, int frag_len) {
|
||||
if ( pos > 0 // bounds check
|
||||
&& !Byte_ascii.Is_ws(src[pos - 1]) // previous byte is not whitespace; frag is part of word; EX: "regionSelect=2"; DATE:2014-02-06
|
||||
)
|
||||
return -1;
|
||||
boolean next_byte_is_equal = false; boolean break_loop = false;
|
||||
int atr_pos = pos + frag_len;
|
||||
for (; atr_pos < end; atr_pos++) {
|
||||
byte atr_b = src[atr_pos];
|
||||
switch (atr_b) {
|
||||
case Byte_ascii.Tab: case Byte_ascii.Nl: case Byte_ascii.Cr: case Byte_ascii.Space: break;
|
||||
case Byte_ascii.Eq:
|
||||
next_byte_is_equal = true;
|
||||
++atr_pos;
|
||||
break_loop = true;
|
||||
break;
|
||||
default:
|
||||
break_loop = true;
|
||||
break;
|
||||
}
|
||||
if (break_loop) break;
|
||||
}
|
||||
return next_byte_is_equal ? atr_pos : -1;
|
||||
}
|
||||
private void Ctor() {
|
||||
Reg_itm("<script");
|
||||
Reg_itm("<iframe");
|
||||
Reg_itm("<style");
|
||||
Reg_itm("<link");
|
||||
Reg_itm("<meta");
|
||||
Reg_itm("<Object");
|
||||
Reg_itm("<frame");
|
||||
Reg_itm("<embed");
|
||||
Reg_itm("<body");
|
||||
Reg_itm("FSCommand");
|
||||
Reg_itm("onAbort");
|
||||
Reg_itm("onActivate");
|
||||
Reg_itm("onAfterPrint");
|
||||
Reg_itm("onAfterUpdate");
|
||||
Reg_itm("onBeforeActivate");
|
||||
Reg_itm("onBeforeCopy");
|
||||
Reg_itm("onBeforeCut");
|
||||
Reg_itm("onBeforeDeactivate");
|
||||
Reg_itm("onBeforeEditFocus");
|
||||
Reg_itm("onBeforePaste");
|
||||
Reg_itm("onBeforePrint");
|
||||
Reg_itm("onBeforeUnload");
|
||||
Reg_itm("onBegin");
|
||||
Reg_itm("onBlur");
|
||||
Reg_itm("onBounce");
|
||||
Reg_itm("onCellChange");
|
||||
Reg_itm("onChange");
|
||||
Reg_itm("onClick");
|
||||
Reg_itm("onContextMenu");
|
||||
Reg_itm("onControlSelect");
|
||||
Reg_itm("onCopy");
|
||||
Reg_itm("onCut");
|
||||
Reg_itm("onDataAvailable");
|
||||
Reg_itm("onDataSetChanged");
|
||||
Reg_itm("onDataSetComplete");
|
||||
Reg_itm("onDblClick");
|
||||
Reg_itm("onDeactivate");
|
||||
Reg_itm("onDrag");
|
||||
Reg_itm("onDragEnd");
|
||||
Reg_itm("onDragLeave");
|
||||
Reg_itm("onDragEnter");
|
||||
Reg_itm("onDragOver");
|
||||
Reg_itm("onDragDrop");
|
||||
Reg_itm("onDrop");
|
||||
Reg_itm("onEnd");
|
||||
Reg_itm("onError");
|
||||
Reg_itm("onErrorUpdate");
|
||||
Reg_itm("onFilterChange");
|
||||
Reg_itm("onFinish");
|
||||
Reg_itm("onFocus");
|
||||
Reg_itm("onFocusIn");
|
||||
Reg_itm("onFocusOut");
|
||||
Reg_itm("onHelp");
|
||||
Reg_itm("onKeyDown");
|
||||
Reg_itm("onKeyPress");
|
||||
Reg_itm("onKeyUp");
|
||||
Reg_itm("onLayoutComplete");
|
||||
Reg_itm("onLoad");
|
||||
Reg_itm("onLoseCapture");
|
||||
Reg_itm("onMediaComplete");
|
||||
Reg_itm("onMediaError");
|
||||
Reg_itm("onMouseDown");
|
||||
Reg_itm("onMouseEnter");
|
||||
Reg_itm("onMouseLeave");
|
||||
Reg_itm("onMouseMove");
|
||||
Reg_itm("onMouseOut");
|
||||
Reg_itm("onMouseOver");
|
||||
Reg_itm("onMouseUp");
|
||||
Reg_itm("onMouseWheel");
|
||||
Reg_itm("onMove");
|
||||
Reg_itm("onMoveEnd");
|
||||
Reg_itm("onMoveStart");
|
||||
Reg_itm("onOutOfSync");
|
||||
Reg_itm("onPaste");
|
||||
Reg_itm("onPause");
|
||||
Reg_itm("onProgress");
|
||||
Reg_itm("onPropertyChange");
|
||||
Reg_itm("onReadyStateChange");
|
||||
Reg_itm("onRepeat");
|
||||
Reg_itm("onReset");
|
||||
Reg_itm("onResize");
|
||||
Reg_itm("onResizeEnd");
|
||||
Reg_itm("onResizeStart");
|
||||
Reg_itm("onResume");
|
||||
Reg_itm("onReverse");
|
||||
Reg_itm("onRowsEnter");
|
||||
Reg_itm("onRowExit");
|
||||
Reg_itm("onRowDelete");
|
||||
Reg_itm("onRowInserted");
|
||||
Reg_itm("onScroll");
|
||||
Reg_itm("onSeek");
|
||||
Reg_itm("onSelect");
|
||||
Reg_itm("onSelectionChange");
|
||||
Reg_itm("onSelectStart");
|
||||
Reg_itm("onStart");
|
||||
Reg_itm("onStop");
|
||||
Reg_itm("onSyncRestored");
|
||||
Reg_itm("onSubmit");
|
||||
Reg_itm("onTimeError");
|
||||
Reg_itm("onTrackChange");
|
||||
Reg_itm("onUnload");
|
||||
Reg_itm("onURLFlip");
|
||||
Reg_itm("seekSegmentTime");
|
||||
ctor = false;
|
||||
}
|
||||
private void Reg_itm(String s) {trie.Add_bry(Bry_.new_a7(s));} Btrie_slim_mgr trie = Btrie_slim_mgr.ci_a7(); // NOTE:ci.ascii:javascript event name
|
||||
}
|
||||
|
||||
@@ -13,28 +13,3 @@ The terms of each license can be found in the source code repository:
|
||||
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
|
||||
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
|
||||
*/
|
||||
package gplx.xowa.htmls.js; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*;
|
||||
import org.junit.*;
|
||||
public class Xoh_js_cleaner_tst {
|
||||
@Before public void init() {fxt.Init();} private Xoh_js_cleaner_fxt fxt = new Xoh_js_cleaner_fxt();
|
||||
@Test public void Basic() {fxt.Test_clean("<i>a</i>", "<i>a</i>");}
|
||||
@Test public void Js_nde() {fxt.Test_clean("a<script>b</script>c", "a<script>b</script>c");}
|
||||
@Test public void Js_atr() {fxt.Test_clean("a<span onmouseover = 'fail'>b</span>c", "a<span onMouseOver= 'fail'>b</span>c");}
|
||||
@Test public void Js_atr_noop() {fxt.Test_clean("a onmouseover b", "a onmouseover b");}
|
||||
@Test public void Js_atr_noop_regionSelect() {fxt.Test_clean("regionSelect=2", "regionSelect=2");}
|
||||
}
|
||||
class Xoh_js_cleaner_fxt {
|
||||
public void Init() {
|
||||
if (mgr == null) {
|
||||
app = Xoa_app_fxt.Make__app__edit();
|
||||
wiki = Xoa_app_fxt.Make__wiki__edit(app);
|
||||
mgr = wiki.Html_mgr().Js_cleaner();
|
||||
}
|
||||
} private Xoae_app app; Xowe_wiki wiki; Xoh_js_cleaner mgr;
|
||||
public void Test_clean(String raw_str, String expd) {
|
||||
byte[] raw = Bry_.new_a7(raw_str);
|
||||
byte[] actl = mgr.Clean(wiki, raw, 0, raw.length);
|
||||
if (actl == null) actl = raw;
|
||||
Tfds.Eq(expd, String_.new_a7(actl));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user