1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2024-10-27 20:34:16 +00:00

Cfg: Add gui_cls

This commit is contained in:
gnosygnu 2016-12-27 11:25:45 -05:00
parent 7da2d853a2
commit 50092ae60a
11 changed files with 53 additions and 43 deletions

View File

@ -17,12 +17,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.dbs.*;
public class Xocfg_itm_row {
public Xocfg_itm_row(int id, int scope_id, String data_type, int gui_type, String gui_args, String key, String dflt) {
public Xocfg_itm_row(int id, int scope_id, String data_type, int gui_type, String gui_args, String gui_cls, String key, String dflt) {
this.id = id;
this.scope_id = scope_id;
this.data_type = data_type;
this.gui_type = gui_type;
this.gui_args = gui_args;
this.gui_cls = gui_cls;
this.key = key;
this.dflt = dflt;
}
@ -31,6 +32,7 @@ public class Xocfg_itm_row {
public String Data_type() {return data_type;} private final String data_type;
public int Gui_type() {return gui_type;} private final int gui_type;
public String Gui_args() {return gui_args;} private final String gui_args;
public String Gui_cls() {return gui_cls;} private final String gui_cls;
public String Key() {return key;} private final String key;
public String Dflt() {return dflt;} private final String dflt;
}

View File

@ -19,7 +19,7 @@ package gplx.xowa.addons.apps.cfgs.dbs.tbls; import gplx.*; import gplx.xowa.*;
import gplx.dbs.*; import gplx.dbs.utls.*;
public class Xocfg_itm_tbl implements Db_tbl {
private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
private final String fld__itm_id, fld__itm_key, fld__itm_scope_id, fld__itm_data_type, fld__itm_gui_type, fld__itm_gui_args, fld__itm_dflt;
private final String fld__itm_id, fld__itm_key, fld__itm_scope_id, fld__itm_data_type, fld__itm_gui_type, fld__itm_gui_cls, fld__itm_gui_args, fld__itm_dflt;
private final Db_conn conn;
public Xocfg_itm_tbl(Db_conn conn) {
this.conn = conn;
@ -30,6 +30,7 @@ public class Xocfg_itm_tbl implements Db_tbl {
this.fld__itm_data_type = flds.Add_str("itm_data_type", 255); // EX: '1'; ENUM: Type_adp_
this.fld__itm_gui_type = flds.Add_int("itm_gui_type"); // EX: '1'; ENUM: Xoitm_gui_tid
this.fld__itm_gui_args = flds.Add_str("itm_gui_args", 255); // EX: '1,40' (numeric); '255' (textbox); 'enum_name' (combo); etc..
this.fld__itm_gui_cls = flds.Add_str("itm_gui_cls", 255); // EX: 'xocfg_custom'
this.fld__itm_dflt = flds.Add_str("itm_dflt", 4096); // EX: 'abc'
conn.Rls_reg(this);
}
@ -38,8 +39,8 @@ public class Xocfg_itm_tbl implements Db_tbl {
conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, fld__itm_key, fld__itm_key)));
}
public void Upsert(int itm_id, int scope_id, String db_type, int gui_type, String gui_args, String itm_key, String itm_dflt) {
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__itm_id), itm_id, itm_key, scope_id, db_type, gui_type, gui_args, itm_dflt);
public void Upsert(int itm_id, int scope_id, String db_type, int gui_type, String gui_args, String gui_cls, String itm_key, String itm_dflt) {
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__itm_id), itm_id, itm_key, scope_id, db_type, gui_type, gui_args, gui_cls, itm_dflt);
}
public int Select_id_or(String key, int or) {
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__itm_key).Crt_str(fld__itm_key, key).Exec_select__rls_auto();
@ -58,6 +59,7 @@ public class Xocfg_itm_tbl implements Db_tbl {
, rdr.Read_str(fld__itm_data_type)
, rdr.Read_int(fld__itm_gui_type)
, rdr.Read_str(fld__itm_gui_args)
, rdr.Read_str(fld__itm_gui_cls)
, rdr.Read_str(fld__itm_key)
, rdr.Read_str(fld__itm_dflt)
);

View File

@ -53,7 +53,7 @@ class Xocfg_cache_mgr__fxt {
public Xocfg_cache_sub_mock Sub() {return sub;} private Xocfg_cache_sub_mock sub = new Xocfg_cache_sub_mock();
public void Init__db_add(String ctx, String key, Object val) {
Xocfg_maint_svc.Create_grp(mgr.Db_app(), id++, "test_grp", "", "", "");
Xocfg_maint_svc.Create_itm(mgr.Db_app(), id++, key, "test_grp", "", "", "wiki", "string", "dflt", "string", "");
Xocfg_maint_svc.Create_itm(mgr.Db_app(), id++, key, "test_grp", "", "", "wiki", "string", "dflt", "string", "", "");
mgr.Db_usr().Set_str(ctx, key, Object_.Xto_str_strict_or_null(val));
}
public void Init__sub(String ctx, String key, String evt) {

View File

@ -23,7 +23,7 @@ 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, lang, name, ctx, date;
private String data_type, gui_args, gui_cls, lang, name, ctx, date;
private byte[] val, dflt; // NOTE: data is always escaped b/c it is only consumed by mustache; EX: "&lt;&apos;" not "<'"
private Xocfg_type_mgr type_mgr;
public Xoedit_itm(Xocfg_type_mgr type_mgr, int id, String key, int sort) {
@ -37,10 +37,11 @@ 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(Bry_bfr tmp_bfr, int scope_id, String data_type, String gui_type, String gui_args, String dflt_str) {
public void Load_by_meta(Bry_bfr tmp_bfr, int scope_id, String data_type, String gui_type, String gui_args, String gui_cls, String dflt_str) {
this.data_type = data_type;
this.gui_type = gui_type;
this.gui_args = gui_args;
this.gui_cls = gui_cls;
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) {
@ -53,7 +54,7 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
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=")
if ( String_.Has(gui_cls, "read"+"only")
|| String_.Eq(gui_type, gplx.xowa.addons.apps.cfgs.enums.Xoitm_gui_tid.Itm__btn.Key()))
edited = false;
}
@ -81,7 +82,7 @@ public class Xoedit_itm implements Xoedit_nde, Mustache_doc_itm {
return rv;
}
private void To_html(Bry_bfr bfr, Xocfg_type_mgr type_mgr) {
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, gui_cls, val);
}
public boolean Mustache__write(String k, Mustache_bfr bfr) {
if (String_.Eq(k, "id")) bfr.Add_int(id);

View File

@ -19,30 +19,31 @@ 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 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) {
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, String gui_cls, 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;
if (String_.Len_gt_0(gui_cls)) gui_cls = " " + gui_cls;
switch (Xoitm_gui_tid.To_uid(gui_type_key)) {
case Xoitm_gui_tid.Tid__bool:
bfr.Add_str_u8_fmt
( "<input id=\"{2}\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}\" accesskey=\"d\" class=\"xocfg__bool\" type=\"checkbox\"{1}{3}></input>"
, gui_type_key, gui_args, key, Bry_.Eq(val, Bool_.Y_bry) ? " checked=\"checked\"" : "");
( "<input id=\"{3}\" data-xocfg-key=\"{3}\" data-xocfg-gui=\"{0}\" accesskey=\"d\" class=\"xocfg__bool{2}\" type=\"checkbox\"{1}{4}></input>"
, gui_type_key, gui_args, gui_cls, key, Bry_.Eq(val, Bool_.Y_bry) ? " checked=\"checked\"" : "");
break;
case Xoitm_gui_tid.Tid__int:
bfr.Add_str_u8_fmt
( "<input id=\"{2}\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}\" accesskey=\"d\" class=\"xocfg__int\" type=\"text\"{1} value=\"{3}\"></input>"
, gui_type_key, gui_args, key, val);
( "<input id=\"{3}\" data-xocfg-key=\"{3}\" data-xocfg-gui=\"{0}\" accesskey=\"d\" class=\"xocfg__int{2}\" type=\"text\"{1} value=\"{4}\"></input>"
, gui_type_key, gui_args, gui_cls, key, val);
break;
case Xoitm_gui_tid.Tid__str:
bfr.Add_str_u8_fmt
( "<input id=\"{2}\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}\" accesskey=\"d\" class=\"xocfg__str\" type=\"text\"{1} value=\"{3}\"></input>"
, gui_type_key, gui_args, key, val);
( "<input id=\"{3}\" data-xocfg-key=\"{3}\" data-xocfg-gui=\"{0}\" accesskey=\"d\" class=\"xocfg__str{2}\" type=\"text\"{1} value=\"{4}\"></input>"
, gui_type_key, gui_args, gui_cls, 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
( "<textarea id=\"{2}\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}\" accesskey=\"d\" class=\"xocfg__memo\"{1}>{3}</textarea>"
, gui_type_key, gui_args, key, val);
( "<textarea id=\"{3}\" data-xocfg-key=\"{3}\" data-xocfg-gui=\"{0}\" accesskey=\"d\" class=\"xocfg__memo{2}\"{1}>{4}</textarea>"
, gui_type_key, gui_args, gui_cls, key, val);
break;
case Xoitm_gui_tid.Tid__list:
// get list of kvs by type
@ -52,8 +53,8 @@ public class Xoedit_itm_html {
// build html
bfr.Add_str_u8_fmt
( "<select id=\"{2}\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}\" accesskey=\"d\" class=\"xocfg__list\" {1}>\n"
, gui_type_key, gui_args, key);
( "<select id=\"{3}\" data-xocfg-key=\"{3}\" data-xocfg-gui=\"{0}\" accesskey=\"d\" class=\"xocfg__list{2}\" {1}>\n"
, gui_type_key, gui_args, gui_cls, key);
String val_str = String_.new_u8(val);
for (int i = 0; i < len; i++) {
Keyval kv = kvs_ary[i];
@ -68,26 +69,26 @@ public class Xoedit_itm_html {
case Xoitm_gui_tid.Tid__io_cmd:
String[] lines = Xocfg_mgr.Parse_io_cmd(String_.new_u8(val));
bfr.Add_str_u8_fmt
( "<input class=\"xocfg__io_cmd__exe__txt\" id=\"{2}-exe\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}-exe\" accesskey=\"d\" type=\"text\"{1} value=\"{3}\"></input>\n"
+ "<button class=\"xocfg__io_cmd__exe__btn\" onclick='xowa_io_select(\"file\", \"{2}-exe\", \"Please select a file.\");'>...</button><br/>\n"
, gui_type_key, gui_args, key, lines[0]);
( "<input class=\"xocfg__io_cmd__exe__txt\" id=\"{3}-exe\" data-xocfg-key=\"{3}\" data-xocfg-gui=\"{0}-exe\" accesskey=\"d\" class=\"{2}\" type=\"text\"{1} value=\"{4}\"></input>\n"
+ "<button class=\"xocfg__io_cmd__exe__btn\" onclick='xowa_io_select(\"file\", \"{3}-exe\", \"Please select a file.\");'>...</button><br/>\n"
, gui_type_key, gui_args, gui_cls, key, lines[0]);
bfr.Add_str_u8_fmt
( "<input class=\"xocfg__io_cmd__arg__txt\" id=\"{2}-arg\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}-arg\" accesskey=\"d\" type=\"text\"{1} value=\"{3}\">\n"
, gui_type_key, gui_args, key, lines[1]);
( "<input class=\"xocfg__io_cmd__arg__txt\" id=\"{3}-arg\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}-arg\" accesskey=\"d\" class=\"{2}\" type=\"text\"{1} value=\"{4}\">\n"
, gui_type_key, gui_args, gui_cls, key, lines[1]);
break;
case Xoitm_gui_tid.Tid__gui_binding:
String[] flds = Xoitm_gui_binding.To_gui(String_.new_u8(val));
bfr.Add_str_u8_fmt
( "<input class=\"xocfg__gui_binding__box__txt\" id=\"{2}-box\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}-box\" accesskey=\"d\" type=\"text\"{1} value=\"{3}\"></input>\n"
, gui_type_key, gui_args, key, flds[0]);
( "<input class=\"xocfg__gui_binding__box__txt\" id=\"{3}-box\" data-xocfg-key=\"{3}\" data-xocfg-gui=\"{0}-box\" accesskey=\"d\" class=\"{2}\" type=\"text\"{1} value=\"{4}\"></input>\n"
, gui_type_key, gui_args, gui_cls, key, flds[0]);
bfr.Add_str_u8_fmt
( "<input class=\"xocfg__gui_binding__ipt__txt\" id=\"{2}-ipt\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}-ipt\" accesskey=\"d\" type=\"text\"{1} value=\"{3}\"'>\n"
, gui_type_key, gui_args, key, flds[1]);
( "<input class=\"xocfg__gui_binding__ipt__txt\" id=\"{3}-ipt\" data-xocfg-key=\"{3}\" data-xocfg-gui=\"{0}-ipt\" accesskey=\"d\" class=\"{2}\" type=\"text\"{1} value=\"{4}\"'>\n"
, gui_type_key, gui_args, gui_cls, key, flds[1]);
break;
case Xoitm_gui_tid.Tid__btn:
bfr.Add_str_u8_fmt
( "<button id=\"{2}\" data-xocfg-key=\"{2}\" data-xocfg-gui=\"{0}\" class=\"xocfg__btn\" {1}>{3}</button>"
, gui_type_key, gui_args, key, name);
( "<button id=\"{3}\" data-xocfg-key=\"{3}\" data-xocfg-gui=\"{0}\" class=\"xocfg__btn{2}\" {1}>{4}</button>"
, gui_type_key, gui_args, gui_cls, key, name);
break;
default:
break;

View File

@ -157,6 +157,7 @@ public class Xocfg_edit_loader {
, ", i.itm_data_type"
, ", i.itm_gui_type"
, ", i.itm_gui_args"
, ", i.itm_gui_cls"
, ", i.itm_dflt"
, "FROM cfg_itm i"
, "WHERE i.itm_key IN ({0})"
@ -169,7 +170,7 @@ public class Xocfg_edit_loader {
Xoedit_itm edit_itm = (Xoedit_itm)itm_list.Get_by_or_fail(key);
String dflt = dflt_mgr.Get_or(key, rdr.Read_str("itm_dflt"));
int gui_type = rdr.Read_int("itm_gui_type");
edit_itm.Load_by_meta(tmp_bfr, rdr.Read_int("itm_scope_id"), rdr.Read_str("itm_data_type"), gplx.xowa.addons.apps.cfgs.enums.Xoitm_gui_tid.To_key(gui_type), rdr.Read_str("itm_gui_args"), dflt);
edit_itm.Load_by_meta(tmp_bfr, rdr.Read_int("itm_scope_id"), rdr.Read_str("itm_data_type"), gplx.xowa.addons.apps.cfgs.enums.Xoitm_gui_tid.To_key(gui_type), rdr.Read_str("itm_gui_args"), rdr.Read_str("itm_gui_cls"), dflt);
}
}
}

View File

@ -41,12 +41,13 @@ class Xocfg_maint_grp extends Xocfg_maint_nde { public Xocfg_maint_grp(int id, S
@Override public boolean Type_is_grp() {return true;}
@Override protected void To_bfr_hook(Bry_bfr bfr) {}
}
class Xocfg_maint_itm extends Xocfg_maint_nde { public Xocfg_maint_itm(int id, String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args) {super(id, key, owner, name, help);
class Xocfg_maint_itm extends Xocfg_maint_nde { public Xocfg_maint_itm(int id, String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args, String gui_cls) {super(id, key, owner, name, help);
this.scope = scope;
this.db_type = db_type;
this.dflt = dflt;
this.gui_type = gui_type;
this.gui_args = gui_args;
this.gui_cls = gui_cls;
}
@Override public boolean Type_is_grp() {return false;}
public String Scope() {return scope;} private final String scope;
@ -54,7 +55,8 @@ class Xocfg_maint_itm extends Xocfg_maint_nde { public Xocfg_maint_itm(int id, S
public String Dflt() {return dflt;} private final String dflt;
public String Gui_type() {return gui_type;} private final String gui_type;
public String Gui_args() {return gui_args;} private final String gui_args;
public String Gui_cls() {return gui_cls;} private final String gui_cls;
@Override protected void To_bfr_hook(Bry_bfr bfr) {
bfr.Add_str_u8_fmt("|{0}|{1}|{2}|{3}|{4}", scope, db_type, dflt, gui_type, gui_args);
bfr.Add_str_u8_fmt("|{0}|{1}|{2}|{3}|{4}|{5}", scope, db_type, dflt, gui_type, gui_args, gui_cls);
}
}

View File

@ -49,11 +49,12 @@ class Xocfg_maint_parser {
String dflt = Get_atr_as_str_or_fail(hash, "dflt_");
String gui_type = Get_atr_as_str_or(hash, "gui_type_", null);
String gui_args = Get_atr_as_str_or(hash, "gui_args_", "");
String gui_cls = Get_atr_as_str_or(hash, "gui_cls_", "");
if (gui_type == null) {
gui_type = gplx.xowa.addons.apps.cfgs.enums.Xoitm_gui_tid.Infer_gui_type(db_type);
}
return new Xocfg_maint_itm(id, key, owner, name, help, scope, db_type, dflt, gui_type, gui_args);
return new Xocfg_maint_itm(id, key, owner, name, help, scope, db_type, dflt, gui_type, gui_args, gui_cls);
}
else throw Err_.new_wo_type("xo.cfg_maint:unknown type", "type", nde_type);
}

View File

@ -25,8 +25,8 @@ public class Xocfg_maint_parser__tst {
);
}
@Test public void Parse_itm() {
fxt.Exec__parse("itm {id='123'; key='key_1'; owner='owner_1'; name='name_1'; help='help_1'; scope='scope_1'; db_type='db_type_1'; dflt='dflt_1'; gui_type='gui_type_1'; gui_args='gui_args_1'}"
, fxt.Make__itm(123, "key_1", "owner_1", "name_1", "help_1", "scope_1", "db_type_1", "dflt_1", "gui_type_1", "gui_args_1")
fxt.Exec__parse("itm {id='123'; key='key_1'; owner='owner_1'; name='name_1'; help='help_1'; scope='scope_1'; db_type='db_type_1'; dflt='dflt_1'; gui_type='gui_type_1'; gui_args='gui_args_1'; gui_cls='gui_cls_1'}"
, fxt.Make__itm(123, "key_1", "owner_1", "name_1", "help_1", "scope_1", "db_type_1", "dflt_1", "gui_type_1", "gui_args_1", "gui_cls_1")
);
}
}
@ -39,7 +39,7 @@ class Xocfg_maint_parser__fxt {
public Xocfg_maint_grp Make__grp(int id, String key, String owner, String name, String help) {
return new Xocfg_maint_grp(id, key, owner, name, help);
}
public Xocfg_maint_itm Make__itm(int id, String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args) {
return new Xocfg_maint_itm(id, key, owner, name, help, scope, db_type, dflt, gui_type, gui_args);
public Xocfg_maint_itm Make__itm(int id, String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args, String gui_cls) {
return new Xocfg_maint_itm(id, key, owner, name, help, scope, db_type, dflt, gui_type, gui_args, gui_cls);
}
}

View File

@ -44,7 +44,7 @@ public class Xocfg_maint_svc {
}
else {
Xocfg_maint_itm itm = (Xocfg_maint_itm)nde;
Xocfg_maint_svc.Create_itm(db_app, nde.Id(), nde.Key(), nde.Owner(), nde.Name(), String_.new_u8(help), itm.Scope(), itm.Db_type(), itm.Dflt(), itm.Gui_type(), itm.Gui_args());
Xocfg_maint_svc.Create_itm(db_app, nde.Id(), nde.Key(), nde.Owner(), nde.Name(), String_.new_u8(help), itm.Scope(), itm.Db_type(), itm.Dflt(), itm.Gui_type(), itm.Gui_args(), itm.Gui_cls());
}
}
db_app.Conn().Txn_end();
@ -61,12 +61,12 @@ public class Xocfg_maint_svc {
// insert nde_i18n
db_app.Tbl__txt().Upsert(grp_id, Xoitm_lang_tid.Lang__dflt, name, help);
}
public static void Create_itm(Xocfg_db_app db_app, int itm_id, String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args) {
public static void Create_itm(Xocfg_db_app db_app, int itm_id, String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args, String gui_cls) {
// insert itm_meta
int grp_id = db_app.Tbl__grp().Select_id_by_key_or_fail(owner);
int scope_id = Xoitm_scope_tid.To_int(scope);
int gui_type_id = Xoitm_gui_tid.To_uid(gui_type);
db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type, gui_type_id, gui_args, key, dflt);
db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type, gui_type_id, gui_args, gui_cls, key, dflt);
// insert grp_map
int itm_sort = db_app.Tbl__map().Select_sort_or_next(grp_id, itm_id);

View File

@ -45,7 +45,7 @@ public class Xoctg_catpage_mgr implements Gfo_invk {
if (String_.Eq(missing_cls, Str__missing_cls__normal)) return Css__missing_cls__normal;
else if (String_.Eq(missing_cls, Str__missing_cls__hide)) return Css__missing_cls__hide;
else if (String_.Eq(missing_cls, Str__missing_cls__red)) return Css__missing_cls__red;
else throw Err_.new_unhandled(missing_cls);
else return Bry_.Empty; // NOTE: do not throw error, else fatal error when regen'ing cfg db; DATE:2016-12-27
}
public void Init_by_wiki(Xow_wiki wiki) {
wiki.App().Cfg().Bind_many_wiki(this, wiki, Cfg__missing_class);