1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2024-09-29 06:50:50 +00:00

Cfg: Show items

This commit is contained in:
gnosygnu 2016-11-15 12:13:27 -05:00
parent 21102d846f
commit bc04443812
10 changed files with 96 additions and 27 deletions

View File

@ -25,6 +25,7 @@ public class Mustache_bfr {
public void Add_long (long v) {bfr.Add_long_variable(v);} public void Add_long (long v) {bfr.Add_long_variable(v);}
public void Add_double (double v) {bfr.Add_double(v);} public void Add_double (double v) {bfr.Add_double(v);}
public void Add_str_u8 (String v) {bfr.Add_str_u8(v);} public void Add_str_u8 (String v) {bfr.Add_str_u8(v);}
public void Add_str_u8_safe (String v) {if (v != null) bfr.Add_str_u8(v);}
public void Add_mid (byte[] src, int bgn, int end) {bfr.Add_mid(src, bgn, end);} public void Add_mid (byte[] src, int bgn, int end) {bfr.Add_mid(src, bgn, end);}
public void Add_bry (byte[] v) { public void Add_bry (byte[] v) {
if (v == null) return; // allow items to have null props if (v == null) return; // allow items to have null props

View File

@ -32,7 +32,7 @@ public class Xoa_app_ {
} }
} }
public static final String Name = "xowa"; public static final String Name = "xowa";
public static final String Version = "3.11.2.1"; public static final String Version = "3.11.2.2";
public static String Build_date = "2012-12-30 00:00:00"; public static String Build_date = "2012-12-30 00:00:00";
public static String Op_sys_str; public static String Op_sys_str;
public static String User_agent = ""; public static String User_agent = "";

View File

@ -32,14 +32,14 @@ public class Xogrp_map_tbl implements Db_tbl {
public String Tbl_name() {return tbl_name;} private final String tbl_name; public String Tbl_name() {return tbl_name;} private final String tbl_name;
public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));} public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));}
public void Upsert(int map_src, int map_trg, int map_sort) { public void Upsert(int map_src, int map_trg, int map_sort) {
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__map_src), map_src, map_trg, map_sort); Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__map_src, fld__map_trg), map_src, map_trg, map_sort);
} }
public int Select_next_sort(int owner_id) { public int Select_next_sort(int owner_id) {
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__map_src).Crt_int(fld__map_src, owner_id).Exec_select__rls_auto(); Db_rdr rdr = conn.Stmt_sql("SELECT Max(map_sort) AS map_sort FROM cfg_grp_map WHERE map_src = ?").Crt_int(fld__map_src, owner_id).Exec_select__rls_auto();
try { try {
return rdr.Move_next() if (!rdr.Move_next()) return 0;
? rdr.Read_int(fld__map_sort) + 1 Object max = rdr.Read_obj(fld__map_sort);
: 0; return max == null ? 0 : Int_.cast(max) + 1;
} }
finally {rdr.Rls();} finally {rdr.Rls();}
} }

View File

@ -34,7 +34,7 @@ public class Xonde_i18n_tbl implements Db_tbl {
public String Tbl_name() {return tbl_name;} private final String tbl_name; public String Tbl_name() {return tbl_name;} private final String tbl_name;
public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));} public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));}
public void Upsert(int nde_tid, int nde_id, String nde_lang, String nde_name, String nde_help) { public void Upsert(int nde_tid, int nde_id, String nde_lang, String nde_name, String nde_help) {
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__nde_tid, fld__nde_id, fld__nde_lang), nde_tid, nde_id, nde_lang, nde_name, nde_help); Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__nde_id, fld__nde_tid, fld__nde_lang), nde_id, nde_tid, nde_lang, nde_name, nde_help);
} }
public Xonde_i18n_itm Select_by_id_or_null(int id) { public Xonde_i18n_itm Select_by_id_or_null(int id) {
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__nde_id).Crt_int(fld__nde_id, id).Exec_select__rls_auto(); Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__nde_id).Crt_int(fld__nde_id, id).Exec_select__rls_auto();

View File

@ -18,6 +18,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.*; 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.langs.mustaches.*;
public class Xogui_grp implements Xogui_nde, Mustache_doc_itm { public class Xogui_grp implements Xogui_nde, Mustache_doc_itm {
private Xogui_itm[] itms = new Xogui_itm[0];
public Xogui_grp(int id, int sort, String key) { public Xogui_grp(int id, int sort, String key) {
this.id = id; this.id = id;
this.sort = sort; this.sort = sort;
@ -39,14 +40,17 @@ public class Xogui_grp implements Xogui_nde, Mustache_doc_itm {
public void Grps__add(Xogui_grp grp) { public void Grps__add(Xogui_grp grp) {
} }
public void Itms__add(Xogui_itm itm) { public void Itms_(Xogui_itm[] v) {
this.itms = v;
} }
public boolean Mustache__write(String key, Mustache_bfr bfr) { public boolean Mustache__write(String k, Mustache_bfr bfr) {
if (String_.Eq(key, "id")) bfr.Add_int(id); if (String_.Eq(k, "id")) bfr.Add_int(id);
else if (String_.Eq(key, "key")) bfr.Add_str_u8(key); else if (String_.Eq(k, "key")) bfr.Add_str_u8(key);
else if (String_.Eq(k, "name")) bfr.Add_str_u8_safe(name);
return false; return false;
} }
public Mustache_doc_itm[] Mustache__subs(String key) { public Mustache_doc_itm[] Mustache__subs(String key) {
if (String_.Eq(key, "itms")) return itms;
return Mustache_doc_itm_.Ary__empty; return Mustache_doc_itm_.Ary__empty;
} }
} }

View File

@ -16,7 +16,8 @@ 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/>. 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.*; 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.*;
public class Xogui_itm implements Xogui_nde { import gplx.langs.mustaches.*;
public class Xogui_itm implements Xogui_nde, Mustache_doc_itm {
public Xogui_itm(int id, int sort) { public Xogui_itm(int id, int sort) {
this.id = id; this.id = id;
this.sort = sort; this.sort = sort;
@ -59,4 +60,12 @@ public class Xogui_itm implements Xogui_nde {
this.val = dflt; this.val = dflt;
this.date = String_.Empty; this.date = String_.Empty;
} }
public boolean Mustache__write(String key, Mustache_bfr bfr) {
if (String_.Eq(key, "name")) bfr.Add_str_u8(name);
else if (String_.Eq(key, "html")) new Xogui_itm_html().Build_html(bfr.Bfr(), name, gui_type, gui_args, val);
return true;
}
public Mustache_doc_itm[] Mustache__subs(String key) {
return Mustache_doc_itm_.Ary__empty;
}
} }

View File

@ -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.xowa.addons.apps.cfgs.dbs.*;
public class Xogui_itm_html {
public void Build_html(Bry_bfr bfr, 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 type='checkbox' class='xocfg_checkbox'{0}></input>", String_.Eq(data, "true") ? " checked='checked'" : "");
break;
case Xoitm_gui_tid.Tid__numeric:
bfr.Add_str_u8_fmt("<input type='text' class='xocfg_numeric' value='{0}'></input>", data);
break;
case Xoitm_gui_tid.Tid__textbox:
bfr.Add_str_u8_fmt("<input type='text' class='xocfg_textbox' value='{0}'></input>", data);
break;
case Xoitm_gui_tid.Tid__memo:
bfr.Add_str_u8_fmt("<textarea type='text' class='xocfg_memo'>{0}</textarea>", data);
break;
case Xoitm_gui_tid.Tid__select:
bfr.Add_str_u8_fmt("<select type='text' class='xocfg_select' size='3'>");
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("</select>");
break;
case Xoitm_gui_tid.Tid__fs_file:
bfr.Add_str_u8_fmt("<input type='text' class='xocfg_fs_file' value='{0}'></input>", data);
break;
}
}
}

View File

@ -34,6 +34,7 @@ public class Xogui_mgr {
if (grp_meta == null) throw Err_.new_wo_type("cfg:grp not found", "grp", 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()); Xogui_grp owner = new Xogui_grp(grp_meta.Id(), 0, grp_meta.Key());
owner_hash.Add(grp_meta.Id(), owner); owner_hash.Add(grp_meta.Id(), owner);
grp_regy.Add(owner);
// load tree by selecting subs until no more owners // load tree by selecting subs until no more owners
while (owner_hash.Count() > 0) { while (owner_hash.Count() > 0) {
@ -50,31 +51,33 @@ public class Xogui_mgr {
} }
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_regy, Xogui_nde_hash itm_regy, Ordered_hash owner_hash, Xogui_grp owner) {
String sql = Db_sql_.Make_by_fmt(String_.Ary String sql = Db_sql_.Make_by_fmt(String_.Ary
( "SELECT m.trg_id" ( "SELECT m.map_trg"
, ", m.sort_id" , ", m.map_sort"
, ", t.grp_key" , ", t.grp_key"
, "FROM cfg_grp_map m" , "FROM cfg_grp_map m"
, " LEFT JOIN cfg_grp_meta t ON m.trg_id = t.grp_id" , " LEFT JOIN cfg_grp_meta t ON m.map_trg = t.grp_id"
, "WHERE m.src_id = {0}" , "WHERE m.map_src = {0}"
), owner.Id() ), owner.Id()
); );
Db_rdr rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto(); Db_rdr rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto();
List_adp itms_list = List_adp_.New();
while (rdr.Move_next()) { while (rdr.Move_next()) {
String grp_key = rdr.Read_str("grp_key"); String grp_key = rdr.Read_str("grp_key");
// nde is grp // nde is grp
if (grp_key == null) { if (grp_key == null) {
Xogui_itm gui_itm = new Xogui_itm(rdr.Read_int("trg_id"), rdr.Read_int("sort_id")); Xogui_itm gui_itm = new Xogui_itm(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"));
owner.Itms__add(gui_itm); itms_list.Add(gui_itm);
itm_regy.Add(gui_itm); itm_regy.Add(gui_itm);
} }
// nde is grp // nde is grp
else { else {
Xogui_grp gui_grp = new Xogui_grp(rdr.Read_int("trg_id"), rdr.Read_int("sort_id"), grp_key); Xogui_grp gui_grp = new Xogui_grp(rdr.Read_int("map_trg"), rdr.Read_int("map_sort"), grp_key);
owner.Grps__add(gui_grp); owner.Grps__add(gui_grp);
grp_regy.Add(gui_grp); grp_regy.Add(gui_grp);
owner_hash.Add(gui_grp.Id(), gui_grp); owner_hash.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) { private void Load_itm_meta(Xogui_nde_hash itm_regy) {
Xogui_nde_iter iter = Xogui_nde_iter.New_sql(itm_regy); Xogui_nde_iter iter = Xogui_nde_iter.New_sql(itm_regy);
@ -152,7 +155,7 @@ public class Xogui_mgr {
, ", h.nde_name" , ", h.nde_name"
, ", h.nde_help" , ", h.nde_help"
, ", h.nde_lang" , ", h.nde_lang"
, "FROM cfg_itm_meta t" , "FROM cfg_nde_i18n h"
, "WHERE h.nde_id IN ({0})" , "WHERE h.nde_id IN ({0})"
, "AND h.nde_lang = '{1}'" , "AND h.nde_lang = '{1}'"
), cur_iter.To_sql_in() ), cur_iter.To_sql_in()
@ -162,7 +165,7 @@ public class Xogui_mgr {
// read and set i18n // read and set i18n
Db_rdr rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto(); Db_rdr rdr = db_mgr.Conn().Stmt_sql(sql).Exec_select__rls_auto();
while (rdr.Move_next()) { while (rdr.Move_next()) {
Xogui_nde gui_itm = (Xogui_itm)cur_regy.Get_at(rdr.Read_int("nde_id")); Xogui_nde gui_itm = (Xogui_nde)cur_regy.Get_by_or_fail(rdr.Read_int("nde_id"));
gui_itm.Load_by_i18n(rdr.Read_str("nde_lang"), rdr.Read_str("nde_name"), rdr.Read_str("nde_help")); gui_itm.Load_by_i18n(rdr.Read_str("nde_lang"), rdr.Read_str("nde_name"), rdr.Read_str("nde_help"));
cur_regy.Deleted__add(gui_itm); cur_regy.Deleted__add(gui_itm);
} }

View File

@ -62,6 +62,7 @@ class Xogui_nde_iter {
public String To_sql_in() { public String To_sql_in() {
Bry_bfr bfr = Bry_bfr_.New(); Bry_bfr bfr = Bry_bfr_.New();
int end = bgn + max; int end = bgn + max;
if (end > hash.Len()) end = hash.Len();
for (int i = bgn; i < end; i++) { for (int i = bgn; i < end; i++) {
Xogui_nde nde = hash.Get_at(i); Xogui_nde nde = hash.Get_at(i);
if (i != bgn) bfr.Add_byte_comma(); if (i != bgn) bfr.Add_byte_comma();

View File

@ -35,12 +35,16 @@ public class Xocfg_item_bridge implements gplx.xowa.htmls.bridges.Bridge_cmd_itm
private void Save(Json_nde args) { private void Save(Json_nde args) {
String data = args.Get_as_str("data"); String data = args.Get_as_str("data");
gplx.xowa.addons.apps.cfgs.dbs.Xocfg_itm_bldr itm_bldr = new gplx.xowa.addons.apps.cfgs.dbs.Xocfg_itm_bldr(new gplx.xowa.addons.apps.cfgs.dbs.Xocfg_db_mgr(app.User().User_db_mgr().Conn())); gplx.xowa.addons.apps.cfgs.dbs.Xocfg_itm_bldr itm_bldr = new gplx.xowa.addons.apps.cfgs.dbs.Xocfg_itm_bldr(new gplx.xowa.addons.apps.cfgs.dbs.Xocfg_db_mgr(app.User().User_db_mgr().Conn()));
String[] ary = String_.Split(data, "|"); String[] lines = String_.Split(data, "\n");
if (String_.Eq(ary[0], "grp")) { for (String line : lines) {
itm_bldr.Create_grp(ary[1], ary[2], ary[3], ary[4]); String[] ary = String_.Split(line, "|");
} if (ary.length < 4) continue;
else { if (String_.Eq(ary[0], "grp")) {
itm_bldr.Create_itm(ary[1], ary[2], ary[3], ary[4], ary[5], ary[6], ary[7], ary[8]); itm_bldr.Create_grp(ary[1], ary[2], ary[3], ary[4]);
}
else {
itm_bldr.Create_itm(ary[1], ary[2], ary[3], ary[4], ary[5], ary[6], ary[7], ary[8]);
}
} }
} }