Cfg: Add mutliple sections and groups

v3.3.4
gnosygnu 8 years ago
parent 5d27bff298
commit ceaae41b57

@ -37,4 +37,7 @@ public class Xocfg_mgr {
public void Set_str(String ctx, String key, String val) {
cache_mgr.Set(ctx, key, val);
}
public void Del(String ctx, String key) {
cache_mgr.Del(ctx, key);
}
}

@ -17,8 +17,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
import gplx.langs.mustaches.*;
public class Xogui_grp implements Xogui_nde, Mustache_doc_itm {
private Xogui_itm[] itms = new Xogui_itm[0];
import gplx.core.gfobjs.*;
public class Xogui_grp implements Xogui_nde, Mustache_doc_itm {
public Xogui_grp(int id, int sort, String key) {
this.id = id;
this.sort = sort;
@ -32,6 +32,8 @@ public class Xogui_grp implements Xogui_nde, Mustache_doc_itm {
public String Lang() {return lang;} private String lang;
public String Name() {return name;} private String name;
public String Help() {return help;} private String help;
public Xogui_itm[] Itms() {return itms;} private Xogui_itm[] itms = new Xogui_itm[0];
public void Load_by_i18n(String lang, String name, String help) {
this.lang = lang;
this.name = name;
@ -43,6 +45,23 @@ public class Xogui_grp implements Xogui_nde, Mustache_doc_itm {
public void Itms_(Xogui_itm[] v) {
this.itms = v;
}
public Gfobj_nde To_nde() {
Gfobj_nde rv = Gfobj_nde.New();
rv.Add_int("id", id);
rv.Add_str("key", key);
rv.Add_str("lang", lang);
rv.Add_str("name", name);
rv.Add_str("help", help);
List_adp list = List_adp_.New();
int len = itms.length;
for (int i = 0; i < len; i++) {
Xogui_itm itm = itms[i];
list.Add(itm.To_nde());
}
rv.Add_ary("itms", new Gfobj_ary((Gfobj_nde[])list.To_ary_and_clear(Gfobj_nde.class)));
return rv;
}
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);

@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
import gplx.langs.mustaches.*;
import gplx.core.gfobjs.*; import gplx.langs.jsons.*;
public class Xogui_itm implements Xogui_nde, Mustache_doc_itm {
public Xogui_itm(int id, int sort) {
this.id = id;
@ -30,6 +31,7 @@ public class Xogui_itm implements Xogui_nde, Mustache_doc_itm {
public String Gui_args() {return gui_args;} private String gui_args;
public String Key() {return key;} private String key;
public String Dflt() {return dflt;} private String dflt;
public boolean Edited() {return edited;} private boolean edited;
public String Lang() {return lang;} private String lang;
public String Name() {return name;} private String name;
@ -54,11 +56,33 @@ public class Xogui_itm implements Xogui_nde, Mustache_doc_itm {
this.ctx = ctx;
this.val = val;
this.date = date;
this.edited = true;
}
public void Set_data_by_dflt() {
this.ctx = Ctx__app;
this.val = dflt;
this.date = String_.Empty;
this.edited = false;
}
public Gfobj_nde To_nde() {
Gfobj_nde rv = Gfobj_nde.New();
rv.Add_int("id", id);
rv.Add_str("key", key);
rv.Add_str("dflt", lang);
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_str("date", date);
Bry_bfr bfr = Bry_bfr_.New();
To_html(bfr);
// rv.Add_str("html", String_.Replace(bfr.To_str_and_clear(), "'", "\\\""));
rv.Add_str("html", bfr.To_str_and_clear());
return rv;
}
private void To_html(Bry_bfr bfr) {
new Xogui_itm_html().Build_html(bfr, key, name, gui_type, gui_args, val);
}
public boolean Mustache__write(String k, Mustache_bfr bfr) {
if (String_.Eq(k, "id")) bfr.Add_int(id);
@ -70,11 +94,12 @@ public class Xogui_itm implements Xogui_nde, Mustache_doc_itm {
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, "html")) new Xogui_itm_html().Build_html(bfr.Bfr(), key, name, gui_type, gui_args, val);
else if (String_.Eq(k, "html")) To_html(bfr.Bfr());
return true;
}
public static String Ctx__app = "app";
public Mustache_doc_itm[] Mustache__subs(String key) {
public Mustache_doc_itm[] Mustache__subs(String k) {
if (String_.Eq(k, "edited")) return Mustache_doc_itm_.Ary__bool(edited);
return Mustache_doc_itm_.Ary__empty;
}
}

@ -21,26 +21,26 @@ public class Xogui_itm_html {
public void Build_html(Bry_bfr bfr, String key, String name, int gui_type, String gui_args, String data) {
switch (gui_type) {
case Xoitm_gui_tid.Tid__checkbox:
bfr.Add_str_u8_fmt("<input id='{0}' data-xocfg='0' type='checkbox' accesskey='d' class='xocfg_checkbox'{1}></input>", key, String_.Eq(data, "y") ? " checked='checked'" : "");
bfr.Add_str_u8_fmt("<input id=\"{0}\" data-xocfg=\"0\" type=\"checkbox\" accesskey=\"d\" class=\"xocfg_checkbox\"{1}></input>", key, String_.Eq(data, "y") ? " checked=\"checked\"" : "");
break;
case Xoitm_gui_tid.Tid__numeric:
bfr.Add_str_u8_fmt("<input id='{0}' data-xocfg='0' type='text' accesskey='d' class='xocfg_numeric' value='{1}'></input>", key, data);
bfr.Add_str_u8_fmt("<input id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_numeric\" value=\"{1}\"></input>", key, data);
break;
case Xoitm_gui_tid.Tid__textbox:
bfr.Add_str_u8_fmt("<input id='{0}' data-xocfg='0' type='text' accesskey='d' class='xocfg_textbox' value='{1}'></input>", key, data);
bfr.Add_str_u8_fmt("<input id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_textbox\" value=\"{1}\"></input>", key, data);
break;
case Xoitm_gui_tid.Tid__memo:
bfr.Add_str_u8_fmt("<textarea id='{0}' data-xocfg='0' type='text' accesskey='d' class='xocfg_memo'>{1}</textarea>", key, data);
bfr.Add_str_u8_fmt("<textarea id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_memo\">{1}</textarea>", key, data);
break;
case Xoitm_gui_tid.Tid__select:
bfr.Add_str_u8_fmt("<select id='{0}' data-xocfg='0' type='text' accesskey='d' class='xocfg_select' size='3'>", key);
bfr.Add_str_u8_fmt("<select id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_select\" size=\"3\">", key);
for (int i = 0; i < 3; i++) {
bfr.Add_str_u8_fmt("<option value='{0}'{2}>{1}</option>", i, i, i == 2 ? " selected='selected'" : "");
bfr.Add_str_u8_fmt("<option value=\"{0}\"{2}>{1}</option>", i, i, i == 2 ? " selected=\"selected\"" : "");
}
bfr.Add_str_u8_fmt("</select>");
break;
case Xoitm_gui_tid.Tid__fs_file:
bfr.Add_str_u8_fmt("<input id='{0}' data-xocfg='0' type='text' accesskey='d' class='xocfg_fs_file' value='{1}'></input>", key, data);
bfr.Add_str_u8_fmt("<input id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_fs_file\" value=\"{1}\"></input>", key, data);
break;
}
}

@ -23,33 +23,84 @@ public class Xogui_mgr {
public Xogui_mgr(Xocfg_db_mgr db_mgr) {
this.db_mgr = db_mgr;
}
public Xogui_grp Get_by_grp(String grp_key, String ctx, String lang) {
// create hashes
Ordered_hash owner_hash = Ordered_hash_.New();
Xogui_nde_hash grp_regy = new Xogui_nde_hash();
Xogui_nde_hash itm_regy = new Xogui_nde_hash();
public Xogui_root Get_root(String grp_key, String ctx, String lang) {
// create lists
Ordered_hash grp_temp = Ordered_hash_.New();
Xogui_nde_hash grp_list = new Xogui_nde_hash();
Xogui_nde_hash itm_list = new Xogui_nde_hash();
// get root_itm
Xogrp_meta_itm grp_meta = db_mgr.Tbl__grp_meta().Select_by_key_or_null(grp_key);
if (grp_meta == null) throw Err_.new_wo_type("cfg:grp not found", "grp", grp_key);
Xogui_grp owner = new Xogui_grp(grp_meta.Id(), 0, grp_meta.Key());
owner_hash.Add(grp_meta.Id(), owner);
grp_regy.Add(owner);
grp_temp.Add(grp_meta.Id(), owner);
grp_list.Add(owner);
// load tree by selecting subs until no more owners
while (owner_hash.Count() > 0) {
owner = (Xogui_grp)owner_hash.Get_at(0);
owner_hash.Del(owner.Id());
Load_subs(grp_regy, itm_regy, owner_hash, owner);
// load tree by selecting subs until no more grps
while (grp_temp.Count() > 0) {
owner = (Xogui_grp)grp_temp.Get_at(0);
grp_temp.Del(owner.Id());
Load_subs(grp_list, itm_list, grp_temp, owner);
}
// load itms and i18n
Load_itm_meta(itm_regy);
Load_itm_data(itm_regy, ctx);
Load_i18n(grp_regy, itm_regy, lang);
return owner;
Load_itm_meta(itm_list);
Load_itm_data(itm_list, ctx);
Load_i18n(grp_list, itm_list, lang);
grp_list.Delete_container_grps();
return new Xogui_root(Load_nav_mgr(grp_key), (Xogui_grp[])grp_list.To_grp_ary_and_clear());
}
private Xogui_nav_mgr Load_nav_mgr(String grp_key) {
// get grp_id
String sql = Db_sql_.Make_by_fmt(String_.Ary
( "SELECT grp_id"
, "FROM cfg_grp_meta"
, "WHERE grp_key = '{0}'"
), grp_key
);
int grp_id = -1;
Db_rdr rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto();
try {grp_id = rdr.Move_next() ? rdr.Read_int("grp_id") : -1;}
finally {rdr.Rls();}
// get owner_id
sql = Db_sql_.Make_by_fmt(String_.Ary
( "SELECT map_src"
, "FROM cfg_grp_map"
, "WHERE map_trg = {0}"
), grp_id
);
int owner_id = -1;
rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto();
try {owner_id = rdr.Move_next() ? rdr.Read_int("map_src") : -1;}
finally {rdr.Rls();}
// get peers
sql = Db_sql_.Make_by_fmt(String_.Ary
( "SELECT m.map_trg"
, ", m.map_sort"
, ", t.grp_key"
, "FROM cfg_grp_map m"
, " LEFT JOIN cfg_grp_meta t ON m.map_trg = t.grp_id"
, "WHERE m.map_src = {0}"
, "ORDER BY m.map_sort"
), owner_id
);
List_adp list = List_adp_.New();
try {
rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto();
while (rdr.Move_next()) {
String nav_key = rdr.Read_str("grp_key");
list.Add(new Xogui_nav_itm(String_.Eq(grp_key, nav_key), nav_key, nav_key));
}
}
finally {
rdr.Rls();
}
return new Xogui_nav_mgr((Xogui_nav_itm[])list.To_ary_and_clear(Xogui_nav_itm.class));
}
private void Load_subs(Xogui_nde_hash grp_regy, Xogui_nde_hash itm_regy, Ordered_hash owner_hash, Xogui_grp owner) {
private void Load_subs(Xogui_nde_hash grp_list, Xogui_nde_hash itm_list, Ordered_hash grp_temp, Xogui_grp owner) {
String sql = Db_sql_.Make_by_fmt(String_.Ary
( "SELECT m.map_trg"
, ", m.map_sort"
@ -63,24 +114,24 @@ public class Xogui_mgr {
List_adp itms_list = List_adp_.New();
while (rdr.Move_next()) {
String grp_key = rdr.Read_str("grp_key");
// nde is grp
// nde is itm
if (grp_key == null) {
Xogui_itm gui_itm = new Xogui_itm(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"));
itms_list.Add(gui_itm);
itm_regy.Add(gui_itm);
itm_list.Add(gui_itm);
}
// nde is grp
else {
Xogui_grp gui_grp = new Xogui_grp(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"), grp_key);
owner.Grps__add(gui_grp);
grp_regy.Add(gui_grp);
owner_hash.Add(gui_grp.Id(), gui_grp);
grp_list.Add(gui_grp);
grp_temp.Add(gui_grp.Id(), gui_grp);
}
}
owner.Itms_((Xogui_itm[])itms_list.To_ary_and_clear(Xogui_itm.class));
}
private void Load_itm_meta(Xogui_nde_hash itm_regy) {
Xogui_nde_iter iter = Xogui_nde_iter.New_sql(itm_regy);
private void Load_itm_meta(Xogui_nde_hash itm_list) {
Xogui_nde_iter iter = Xogui_nde_iter.New_sql(itm_list);
while (iter.Move_next()) {
String sql = Db_sql_.Make_by_fmt(String_.Ary
( "SELECT t.itm_id"
@ -96,13 +147,13 @@ public class Xogui_mgr {
Db_rdr rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto();
while (rdr.Move_next()) {
Xogui_itm gui_itm = (Xogui_itm)itm_regy.Get_by_or_fail(rdr.Read_int("itm_id"));
Xogui_itm gui_itm = (Xogui_itm)itm_list.Get_by_or_fail(rdr.Read_int("itm_id"));
gui_itm.Load_by_meta(rdr.Read_str("itm_key"), rdr.Read_int("itm_scope_id"), rdr.Read_int("itm_gui_type"), rdr.Read_str("itm_gui_args"), rdr.Read_str("itm_dflt"));
}
}
}
private void Load_itm_data(Xogui_nde_hash itm_regy, String... ctxs) {
Xogui_nde_hash cur_regy = new Xogui_nde_hash().Merge(itm_regy);
private void Load_itm_data(Xogui_nde_hash itm_list, String... ctxs) {
Xogui_nde_hash cur_regy = new Xogui_nde_hash().Merge(itm_list);
// loop ctxs where later ctxs are more general defaults; EX: ["en.w", "en.*", "*.w", "app"]
int ctxs_len = ctxs.length;
@ -140,8 +191,8 @@ public class Xogui_mgr {
itm.Set_data_by_dflt();
}
}
private void Load_i18n(Xogui_nde_hash grp_regy, Xogui_nde_hash itm_regy, String... langs) {
Xogui_nde_hash cur_regy = new Xogui_nde_hash().Merge(grp_regy).Merge(itm_regy);
private void Load_i18n(Xogui_nde_hash grp_list, Xogui_nde_hash itm_list, String... langs) {
Xogui_nde_hash cur_regy = new Xogui_nde_hash().Merge(grp_list).Merge(itm_list);
// loop langs where later langs are fallbacks; EX: ["de", "en"]
int langs_len = langs.length;

@ -0,0 +1,37 @@
/*
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.addons.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
import gplx.langs.mustaches.*;
public class Xogui_nav_itm implements Mustache_doc_itm {
private final boolean selected;
private final String key, text;
public Xogui_nav_itm(boolean selected, String key, String text) {
this.selected = selected;
this.key = key;
this.text = text;
}
public boolean Mustache__write(String k, Mustache_bfr bfr) {
if (String_.Eq(k, "key")) bfr.Add_str_u8(key);
else if (String_.Eq(k, "text")) bfr.Add_str_u8(text);
return true;
}
public Mustache_doc_itm[] Mustache__subs(String k) {
if (String_.Eq(k, "selected")) return Mustache_doc_itm_.Ary__bool(selected);
return Mustache_doc_itm_.Ary__empty;
}
}

@ -0,0 +1,32 @@
/*
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.addons.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
import gplx.langs.mustaches.*;
public class Xogui_nav_mgr implements Mustache_doc_itm {
public Xogui_nav_itm[] Itms() {return itms;} private final Xogui_nav_itm[] itms;
public Xogui_nav_mgr(Xogui_nav_itm[] itms) {
this.itms = itms;
}
public boolean Mustache__write(String k, Mustache_bfr bfr) {
return true;
}
public Mustache_doc_itm[] Mustache__subs(String k) {
if (String_.Eq(k, "itms")) return itms;
return Mustache_doc_itm_.Ary__empty;
}
}

@ -31,6 +31,24 @@ class Xogui_nde_hash {
public Xogui_nde Get_by_or_fail(int id) {
return (Xogui_nde)hash.Get_by_or_fail(id);
}
public Xogui_grp[] To_grp_ary_and_clear() {
return (Xogui_grp[])hash.To_ary_and_clear(Xogui_grp.class);
}
public void Delete_container_grps() {// remove container grps else headers with no items will show up
int len = hash.Len();
for (int i = 0; i < len; i++) {
Xogui_grp grp = (Xogui_grp)hash.Get_at(i);
if (grp.Itms().length == 0)
deleted.Add(grp);
}
len = deleted.Len();
for (int i = 0; i < len; i++) {
Xogui_grp grp = (Xogui_grp)deleted.Get_at(i);
hash.Del(grp.Id());
}
}
public Xogui_nde_hash Merge(Xogui_nde_hash src) {
int len = src.Len();
for (int i = 0; i < len; i++) {

@ -0,0 +1,47 @@
/*
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.addons.apps.cfgs.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*;
import gplx.langs.mustaches.*;
import gplx.core.gfobjs.*;
public class Xogui_root implements Mustache_doc_itm {
private final Xogui_nav_mgr[] nav_mgrs;
private final Xogui_grp[] grps;
public Xogui_root(Xogui_nav_mgr nav_mgr, Xogui_grp[] grps) {
this.nav_mgrs = nav_mgr.Itms().length == 0 ? new Xogui_nav_mgr[0] : new Xogui_nav_mgr[] {nav_mgr};
this.grps = grps;
}
public Gfobj_nde To_nde() {
Gfobj_nde rv = Gfobj_nde.New();
List_adp list = List_adp_.New();
int len = grps.length;
for (int i = 0; i < len; i++) {
Xogui_grp itm = grps[i];
list.Add(itm.To_nde());
}
rv.Add_ary("grps", new Gfobj_ary((Gfobj_nde[])list.To_ary_and_clear(Gfobj_nde.class)));
return rv;
}
public boolean Mustache__write(String k, Mustache_bfr bfr) {
return true;
}
public Mustache_doc_itm[] Mustache__subs(String key) {
if (String_.Eq(key, "grps")) return grps;
else if (String_.Eq(key, "nav")) return nav_mgrs;
return Mustache_doc_itm_.Ary__empty;
}
}

@ -19,12 +19,12 @@ package gplx.xowa.addons.apps.cfgs.mgrs; import gplx.*; import gplx.xowa.*; impo
class Xocfg_cache_grp {
private final Hash_adp vals = Hash_adp_.New();
private final Ordered_hash subs = Ordered_hash_.New();
private final String dflt;
public Xocfg_cache_grp(String key, String dflt) {
this.key = key;
this.dflt = dflt;
}
public String Key() {return key;} private final String key;
public String Dflt() {return dflt;} private final String dflt;
public String Get(String ctx) {
// exact match; EX: "en.w|key_1"
Xocfg_cache_itm rv = (Xocfg_cache_itm)vals.Get_by(ctx);
@ -47,6 +47,9 @@ class Xocfg_cache_grp {
rv.Val_(val);
}
}
public void Del(String ctx) {
vals.Del(ctx);
}
public void Add(String ctx, Xocfg_cache_itm itm) {
vals.Add(ctx, itm);
}
@ -68,7 +71,8 @@ class Xocfg_cache_grp {
Pub(list, val);
}
}
Pub(list, val);
if (list != null) // NOTE: check for null as it's possible for no subscribers
Pub(list, val);
}
private void Pub(List_adp list, String val) {
int len = list.Len();

@ -37,6 +37,12 @@ public class Xocfg_cache_mgr {
db_mgr.Set_str(ctx, key, val);
grp.Pub(ctx, val);
}
public void Del(String ctx, String key) {
Xocfg_cache_grp grp = Grps__get_or_load(key);
grp.Del(ctx);
db_mgr.Del(ctx, key);
grp.Pub(ctx, grp.Dflt());
}
public void Sub(Gfo_invk sub, String ctx, String key, String evt) {
Xocfg_cache_grp grp = Grps__get_or_load(key);
grp.Sub(sub, ctx, evt);

@ -31,15 +31,17 @@ public class Xocfg_list_bridge implements Bridge_cmd_itm {
switch (proc_id) {
case Proc__upsert: mgr.Upsert(args); break;
case Proc__revert: mgr.Revert(args); break;
case Proc__load: mgr.Load(args); break;
default: throw Err_.new_unhandled_default(proc_id);
}
return Bridge_cmd_mgr.Msg__ok;
}
private static final byte Proc__upsert = 0, Proc__revert = 1;
private static final byte Proc__upsert = 0, Proc__revert = 1, Proc__load = 2;
private static final Hash_adp_bry proc_hash = Hash_adp_bry.cs()
.Add_str_byte("upsert" , Proc__upsert)
.Add_str_byte("revert" , Proc__revert)
.Add_str_byte("load" , Proc__load)
;
public byte[] Key() {return BRIDGE_KEY;} public static final byte[] BRIDGE_KEY = Bry_.new_a7("cfg.item.exec");

@ -17,9 +17,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs.specials.lists; 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.specials.*;
import gplx.langs.jsons.*;
import gplx.xowa.addons.apps.cfgs.dbs.*;
import gplx.xowa.guis.cbks.*; import gplx.xowa.addons.apps.cfgs.dbs.*; import gplx.xowa.addons.apps.cfgs.gui.*;
public class Xocfg_list_bridge_mgr {
private final Xoa_app app;
private final Xog_cbk_trg cbk_trg = Xog_cbk_trg.New(Xocfg_list_special.Prototype.Special__meta().Ttl_bry());
public Xocfg_list_bridge_mgr(Xoa_app app) {
this.app = app;
}
@ -30,8 +31,15 @@ public class Xocfg_list_bridge_mgr {
app.Cfg().Set_str(ctx, key, val);
}
public void Revert(Json_nde args) {
// String ctx = args.Get_as_str("ctx");
// String key = args.Get_as_str("key");
// app.Cfg().d.Del(ctx, key);
String ctx = args.Get_as_str("ctx");
String key = args.Get_as_str("key");
app.Cfg().Del(ctx, key);
}
public void Load(Json_nde args) {
String ctx = args.Get_as_str("ctx");
String key = args.Get_as_str("key");
Xogui_mgr gui_mgr = new Xogui_mgr(new Xocfg_db_mgr(app.User().User_db_mgr().Conn()));
Xogui_root gui_root = gui_mgr.Get_root(key, ctx, "en");
app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_list.load__recv", gui_root.To_nde());
}
}

@ -26,18 +26,22 @@ class Xocfg_list_html extends Xow_special_wtr__base {
this.lang = lang;
}
@Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "app", "cfg", "list");}
@Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xocfg_list.mustache.html");}
@Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xocfg_list.core.mustache.html");}
@Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) {
Xogui_mgr mgr = Xogui_mgr.New(app);
return mgr.Get_by_grp(grp_key, ctx, lang);
return mgr.Get_root(grp_key, ctx, lang);
}
@Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) {
Xopg_tag_mgr head_tags = page_data.Head_tags();
Xopg_tag_wtr_.Add__xocss (head_tags, app.Fsys_mgr().Http_root());
Xopg_tag_wtr_.Add__xohelp (head_tags, app.Fsys_mgr().Http_root());
Xopg_tag_wtr_.Add__xolog (head_tags, app.Fsys_mgr().Http_root());
Xopg_tag_wtr_.Add__xoelem (head_tags, app.Fsys_mgr().Http_root());
Xopg_tag_wtr_.Add__mustache (head_tags, app.Fsys_mgr().Http_root());
Xopg_tag_wtr_.Add__xotmpl (head_tags, app.Fsys_mgr().Http_root());
Xopg_tag_wtr_.Add__xoajax (head_tags, app.Fsys_mgr().Http_root(), app);
head_tags.Add(Xopg_tag_itm.New_htm_frag(addon_dir.GenSubFil_nest("bin", "xocfg_list.grps.mustache.html"), "xocfg.grps"));
head_tags.Add(Xopg_tag_itm.New_css_file(addon_dir.GenSubFil_nest("bin", "xocfg_list.css")));
head_tags.Add(Xopg_tag_itm.New_js_file(addon_dir.GenSubFil_nest("bin", "xocfg_list.js")));
}

@ -37,6 +37,14 @@ public class Xopg_tag_wtr_ {
head_tags.Add(Xopg_tag_itm.New_css_file(dir.GenSubFil_nest("xo.log.css")));
head_tags.Add(Xopg_tag_itm.New_js_file(dir.GenSubFil_nest("xo.log.js")));
}
public static void Add__xotmpl(Xopg_tag_mgr head_tags, Io_url http_root) {
Io_url dir = http_root.GenSubDir_nest("bin", "any", "xowa", "html", "res", "src", "xowa", "xotmpl");
head_tags.Add(Xopg_tag_itm.New_js_file(dir.GenSubFil_nest("xo.tmpl.js")));
}
public static void Add__xoelem(Xopg_tag_mgr head_tags, Io_url http_root) {
Io_url dir = http_root.GenSubDir_nest("bin", "any", "xowa", "html", "res", "src", "xowa", "xoelem");
head_tags.Add(Xopg_tag_itm.New_js_file(dir.GenSubFil_nest("xo.elem.js")));
}
public static void Add__xoajax(Xopg_tag_mgr head_tags, Io_url http_root, Xoa_app app) {
Io_url dir = http_root.GenSubDir_nest("bin", "any", "xowa", "html", "res", "src", "xowa", "xoajax");
head_tags.Add(Xopg_tag_itm.New_js_file(dir.GenSubFil_nest("xo.app.js")));

Loading…
Cancel
Save