diff --git a/400_xowa/src/gplx/core/gfobjs/Gfobj_fld.java b/400_xowa/src/gplx/core/gfobjs/Gfobj_fld.java
index b85b6e8bc..63469260d 100644
--- a/400_xowa/src/gplx/core/gfobjs/Gfobj_fld.java
+++ b/400_xowa/src/gplx/core/gfobjs/Gfobj_fld.java
@@ -30,6 +30,7 @@ class Gfobj_fld_ {
, Fld_tid__long = 4
, Fld_tid__double = 5
, Fld_tid__str = 6
+ , Fld_tid__bry = 7
;
}
class Gfobj_fld_str implements Gfobj_fld {
@@ -39,6 +40,13 @@ class Gfobj_fld_str implements Gfobj_fld {
public Object As_obj() {return val;}
public String As_str() {return val;} private String val;
}
+class Gfobj_fld_bry implements Gfobj_fld {
+ public Gfobj_fld_bry(String key, byte[] val) {this.key = key; this.val = val;}
+ public String Key() {return key;} private final String key;
+ public byte Fld_tid() {return Gfobj_fld_.Fld_tid__bry;}
+ public Object As_obj() {return val;}
+ public byte[] As_bry() {return val;} private byte[] val;
+}
class Gfobj_fld_bool implements Gfobj_fld {
public Gfobj_fld_bool(String key, boolean val) {this.key = key; this.val = val;}
public String Key() {return key;} private final String key;
diff --git a/400_xowa/src/gplx/core/gfobjs/Gfobj_nde.java b/400_xowa/src/gplx/core/gfobjs/Gfobj_nde.java
index 75d8f108e..7d1d5650b 100644
--- a/400_xowa/src/gplx/core/gfobjs/Gfobj_nde.java
+++ b/400_xowa/src/gplx/core/gfobjs/Gfobj_nde.java
@@ -49,6 +49,7 @@ public class Gfobj_nde implements Gfobj_grp {
public Gfobj_nde Add_int(String key, int val) {return Add_fld(new Gfobj_fld_int(key, val));}
public Gfobj_nde Add_long(String key, long val) {return Add_fld(new Gfobj_fld_long(key, val));}
public Gfobj_nde Add_str(String key, String val) {return Add_fld(new Gfobj_fld_str(key, val));}
+ public Gfobj_nde Add_bry(String key, byte[] val) {return Add_fld(new Gfobj_fld_bry(key, val));}
public Gfobj_nde Add_url(String key, Io_url val) {return Add_fld(new Gfobj_fld_str(key, val.Raw()));}
public Gfobj_nde Add_double(String key, double val) {return Add_fld(new Gfobj_fld_double(key, val));}
public Gfobj_nde Add_nde(String key, Gfobj_nde val) {return Add_fld(new Gfobj_fld_nde(key, val));}
diff --git a/400_xowa/src/gplx/core/gfobjs/Gfobj_wtr__json.java b/400_xowa/src/gplx/core/gfobjs/Gfobj_wtr__json.java
index 6b743e4a7..8a9c73655 100644
--- a/400_xowa/src/gplx/core/gfobjs/Gfobj_wtr__json.java
+++ b/400_xowa/src/gplx/core/gfobjs/Gfobj_wtr__json.java
@@ -53,6 +53,7 @@ public class Gfobj_wtr__json {
private void Write_fld(Gfobj_fld itm) {
switch (itm.Fld_tid()) {
case Gfobj_fld_.Fld_tid__str: wtr.Kv_str(itm.Key() , ((Gfobj_fld_str)itm).As_str()); break;
+ case Gfobj_fld_.Fld_tid__bry: wtr.Kv_bry(itm.Key() , ((Gfobj_fld_bry)itm).As_bry()); break;
case Gfobj_fld_.Fld_tid__int: wtr.Kv_int(itm.Key() , ((Gfobj_fld_int)itm).As_int()); break;
case Gfobj_fld_.Fld_tid__long: wtr.Kv_long(itm.Key() , ((Gfobj_fld_long)itm).As_long()); break;
case Gfobj_fld_.Fld_tid__bool: wtr.Kv_bool(itm.Key() , ((Gfobj_fld_bool)itm).As_bool()); break;
diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java
index 03234dc00..d1e801de6 100644
--- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java
+++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_grp.java
@@ -37,7 +37,7 @@ public class Xoedit_grp implements Xoedit_nde, Mustache_doc_itm {
this.name = name;
this.help = help;
}
- public Gfobj_nde To_nde() {
+ public Gfobj_nde To_nde(Bry_bfr tmp_bfr) {
Gfobj_nde rv = Gfobj_nde.New();
rv.Add_int("id", id);
rv.Add_str("key", key);
@@ -49,7 +49,7 @@ public class Xoedit_grp implements Xoedit_nde, Mustache_doc_itm {
int len = itms.length;
for (int i = 0; i < len; i++) {
Xoedit_itm itm = itms[i];
- list.Add(itm.To_nde());
+ list.Add(itm.To_nde(tmp_bfr));
}
rv.Add_ary("itms", new Gfobj_ary((Gfobj_nde[])list.To_ary_and_clear(Gfobj_nde.class)));
return rv;
diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java
index d19c517ab..5c0a5ff52 100644
--- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java
+++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm.java
@@ -19,10 +19,12 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gp
import gplx.langs.mustaches.*;
import gplx.core.gfobjs.*; import gplx.langs.jsons.*;
import gplx.xowa.addons.apps.cfgs.mgrs.types.*;
+import gplx.langs.htmls.*;
public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
private String gui_type;
private boolean edited;
- private String data_type, gui_args, dflt, lang, name, ctx, val, date;
+ private String data_type, gui_args, lang, name, ctx, date;
+ private byte[] val, dflt; // NOTE: data is always escaped b/c it is only consumed by mustache; EX: "<'" not "<'"
private Xocfg_type_mgr type_mgr;
public Xoedit_itm(Xocfg_type_mgr type_mgr, int id, String key, int sort) {
this.type_mgr = type_mgr;
@@ -35,20 +37,20 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
public String Help() {return help;} private String help;
public int Sort() {return sort;} private final int sort;
- public void Load_by_meta(int scope_id, String data_type, String gui_type, String gui_args, String dflt) {
+ public void Load_by_meta(Bry_bfr tmp_bfr, int scope_id, String data_type, String gui_type, String gui_args, String dflt_str) {
this.data_type = data_type;
this.gui_type = gui_type;
this.gui_args = gui_args;
- this.dflt = dflt;
+ this.dflt = Gfh_utl.Escape_html_as_bry(tmp_bfr, Bry_.new_u8(dflt_str), Bool_.N, Bool_.N, Bool_.N, Bool_.Y, Bool_.N);
}
public void Load_by_i18n(String lang, String name, String help) {
this.lang = lang;
this.name = name;
this.help = help;
}
- public void Load_by_data(String ctx, String val, String date) {
+ public void Load_by_data(Bry_bfr tmp_bfr, String ctx, String val_str, String date) {
this.ctx = ctx;
- this.val = val;
+ this.val = Gfh_utl.Escape_html_as_bry(tmp_bfr, Bry_.new_u8(val_str), Bool_.N, Bool_.N, Bool_.N, Bool_.Y, Bool_.N);
this.date = date;
this.edited = true;
if ( String_.Has(gui_args, "read"+"only=") || String_.Has(gui_args, "disabled=")
@@ -61,40 +63,38 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
this.date = String_.Empty;
this.edited = false;
}
- public Gfobj_nde To_nde() {
+ public Gfobj_nde To_nde(Bry_bfr tmp_bfr) {
Gfobj_nde rv = Gfobj_nde.New();
rv.Add_int("id", id);
rv.Add_str("key", key);
- rv.Add_str("dflt", dflt);
- rv.Add_str("dflt_text", String_.Replace(dflt, "'", "'"));
+ rv.Add_bry("dflt", dflt);
rv.Add_str("lang", lang);
rv.Add_str("name", name);
rv.Add_str("help", help);
rv.Add_str("ctx", ctx);
- rv.Add_str("val", val);
+ rv.Add_bry("val", val);
rv.Add_str("date", date);
rv.Add_str("gui", gui_type);
- Bry_bfr bfr = Bry_bfr_.New();
- To_html(bfr, type_mgr);
- rv.Add_str("html", bfr.To_str_and_clear());
+ To_html(tmp_bfr, type_mgr);
+ rv.Add_str("html", tmp_bfr.To_str_and_clear());
rv.Add_bool("edited", edited);
return rv;
}
private void To_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr) {
- new Xoedit_itm_html().Build_html(bfr, type_mgr, key, name, data_type, gui_type, gui_args, val);
+ Xoedit_itm_html.Build_html(bfr, type_mgr, key, name, data_type, gui_type, gui_args, val);
}
public boolean Mustache__write(String k, Mustache_bfr bfr) {
- if (String_.Eq(k, "id")) bfr.Add_int(id);
- else if (String_.Eq(k, "key")) bfr.Add_str_u8(key);
- else if (String_.Eq(k, "dflt")) bfr.Add_str_u8(dflt);
- else if (String_.Eq(k, "lang")) bfr.Add_str_u8(lang);
- else if (String_.Eq(k, "name")) bfr.Add_str_u8(name);
- else if (String_.Eq(k, "help")) bfr.Add_str_u8(help);
- else if (String_.Eq(k, "ctx")) bfr.Add_str_u8(ctx);
- else if (String_.Eq(k, "val")) bfr.Add_str_u8(val);
- else if (String_.Eq(k, "date")) bfr.Add_str_u8(date);
- else if (String_.Eq(k, "gui")) bfr.Add_str_u8(gui_type);
- else if (String_.Eq(k, "html")) To_html(bfr.Bfr(), type_mgr);
+ if (String_.Eq(k, "id")) bfr.Add_int(id);
+ else if (String_.Eq(k, "key")) bfr.Add_str_u8(key);
+ else if (String_.Eq(k, "dflt")) bfr.Add_bry(dflt);
+ else if (String_.Eq(k, "lang")) bfr.Add_str_u8(lang);
+ else if (String_.Eq(k, "name")) bfr.Add_str_u8(name);
+ else if (String_.Eq(k, "help")) bfr.Add_str_u8(help);
+ else if (String_.Eq(k, "ctx")) bfr.Add_str_u8(ctx);
+ else if (String_.Eq(k, "val")) bfr.Add_bry(val);
+ else if (String_.Eq(k, "date")) bfr.Add_str_u8(date);
+ else if (String_.Eq(k, "gui")) bfr.Add_str_u8(gui_type);
+ else if (String_.Eq(k, "html")) To_html(bfr.Bfr(), type_mgr);
return true;
}
public Mustache_doc_itm[] Mustache__subs(String k) {
diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java
index 1e9b2ed38..b67fe8bc3 100644
--- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java
+++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/objs/Xoedit_itm_html.java
@@ -19,28 +19,30 @@ package gplx.xowa.addons.apps.cfgs.specials.edits.objs; import gplx.*; import gp
import gplx.xowa.addons.apps.cfgs.enums.*;
import gplx.xowa.addons.apps.cfgs.mgrs.types.*;
public class Xoedit_itm_html {
- public void Build_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr, String key, String name, String data_type, String gui_type_key, String gui_args, String val) {
+ public static void Build_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr, String key, String name, String data_type, String gui_type_key, String gui_args, byte[] val) {
// if gui_args exists, prepend space for html insertion; EX: "type='checkbox'{1}>" with "a=b" -> "type='checkbox' a='b'" x> "type='checkbox'a='b'"
if (String_.Len_gt_0(gui_args)) gui_args = " " + gui_args;
switch (Xoitm_gui_tid.To_uid(gui_type_key)) {
case Xoitm_gui_tid.Tid__bool:
- bfr.Add_str_u8_fmt("", gui_type_key, gui_args, key, String_.Eq(val, "y") ? " checked=\"checked\"" : "");
- /*
- String span_args = "";
- if (String_.Has(gui_args, "disabled=\"disabled\""))
- span_args = " class=\"xocfg__bool__disabled\"";
- bfr.Add_str_u8_fmt("", gui_type_key, gui_args, key, String_.Eq(val, "y") ? " checked=\"checked\"" : "", span_args);
- */
+ bfr.Add_str_u8_fmt
+ ( ""
+ , gui_type_key, gui_args, key, Bry_.Eq(val, Bool_.Y_bry) ? " checked=\"checked\"" : "");
break;
case Xoitm_gui_tid.Tid__int:
- bfr.Add_str_u8_fmt("", gui_type_key, gui_args, key, val);
+ bfr.Add_str_u8_fmt
+ ( ""
+ , gui_type_key, gui_args, key, val);
break;
case Xoitm_gui_tid.Tid__str:
- bfr.Add_str_u8_fmt("", gui_type_key, gui_args, key, val);
+ bfr.Add_str_u8_fmt
+ ( ""
+ , gui_type_key, gui_args, key, val);
break;
case Xoitm_gui_tid.Tid__memo:
if (String_.Len_eq_0(gui_args)) gui_args = " rows=\"4\"";
- bfr.Add_str_u8_fmt("", gui_type_key, gui_args, key, String_.Replace(val, "<", "<"));
+ bfr.Add_str_u8_fmt
+ ( ""
+ , gui_type_key, gui_args, key, val);
break;
case Xoitm_gui_tid.Tid__list:
// get list of kvs by type
@@ -49,27 +51,32 @@ public class Xoedit_itm_html {
if (String_.Len_eq_0(gui_args)) gui_args = "size=\"" + Int_.To_str(len) + "\"";
// build html
- bfr.Add_str_u8_fmt("