1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00
This commit is contained in:
gnosygnu
2015-08-30 22:57:59 -04:00
parent ed911e3de5
commit 5fc4eb41ec
579 changed files with 2460 additions and 1564 deletions

View File

@@ -26,7 +26,7 @@ public class Xoc_layout_mgr implements GfoInvkAble {
public RectAdp Html_box_adj_rect() {return html_box_adj_rect;} private RectAdp html_box_adj_rect = RectAdp_.Zero;
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_html_box_adj_type)) return html_box_adj_type_enm.Get_str(html_box_adj_type);
else if (ctx.Match(k, Invk_html_box_adj_type_)) {html_box_adj_type = Byte_.parse_(m.ReadStr("v")); this.Refresh_window();}
else if (ctx.Match(k, Invk_html_box_adj_type_)) {html_box_adj_type = Byte_.parse(m.ReadStr("v")); this.Refresh_window();}
else if (ctx.Match(k, Invk_html_box_adj_type_list)) return html_box_adj_type_enm.Get_kv_ary();
else if (ctx.Match(k, Invk_html_box_adj_rect)) return html_box_adj_rect.Xto_str();
else if (ctx.Match(k, Invk_html_box_adj_rect_)) {html_box_adj_rect = gplx.gfui.RectAdp_.parse_ws_(m.ReadStr("v")); this.Refresh_window();}

View File

@@ -33,7 +33,6 @@ public class Xou_fsys_mgr implements GfoInvkAble {
public Io_url App_data_history_fil() {return app_data_history_fil;} private Io_url app_data_history_fil;
public Io_url App_temp_dir() {return app_temp_dir;} private Io_url app_temp_dir;
public Io_url App_temp_html_dir() {return app_temp_html_dir;} private Io_url app_temp_html_dir;
public Io_url App_img_dir() {return app_root_dir.GenSubDir_nest("img");}
public Io_url App_data_dir() {return app_root_dir.GenSubDir_nest("data");}
public Io_url App_data_cfg_dir() {return app_root_dir.GenSubDir_nest("data", "cfg");}
public Io_url App_data_cfg_user_fil() {return app_root_dir.GenSubFil_nest("data", "cfg", Xoa_gfs_mgr.Cfg_user_file);}

View File

@@ -35,7 +35,7 @@ class Xou_user_ {
}
public static void Bookmarks_make(Xoae_app app, Xowe_wiki home_wiki) {
app.Usr_dlg().Log_many(GRP_KEY, "bookmarks.create", "creating bookmarks page");
home_wiki.Db_mgr().Save_mgr().Data_create(Xoa_ttl.parse_(home_wiki, Bry_.new_a7("Data:Bookmarks")), Bry_.new_a7(Bookmarks_text));
home_wiki.Db_mgr().Save_mgr().Data_create(Xoa_ttl.parse(home_wiki, Bry_.new_a7("Data:Bookmarks")), Bry_.new_a7(Bookmarks_text));
}
public static final String User_system_cfg_text = String_.Concat_lines_nl
( "app.scripts.txns.get('user.prefs.general').version_('" + Xoa_app_.Version + "').bgn();"

View File

@@ -29,11 +29,11 @@ public class Xouc_window_mgr implements GfoInvkAble {
else if (ctx.Match(k, Invk_mode_)) {mode_str = m.ReadStr("v"); mode_tid = Xto_mode_tid(mode_str);}
else if (ctx.Match(k, Invk_mode_list)) return Options_mode_list;
else if (ctx.Match(k, Invk_rect)) return rect;
else if (ctx.Match(k, Invk_rect_)) rect = Rect_ref.parse_(m.ReadStr("v"));
else if (ctx.Match(k, Invk_rect_)) rect = Rect_ref.parse(m.ReadStr("v"));
else if (ctx.Match(k, Invk_safe_mode)) return Yn.Xto_str(safe_mode);
else if (ctx.Match(k, Invk_safe_mode_)) safe_mode = m.ReadYn("v");
else if (ctx.Match(k, Invk_previous_adj)) return previous_adj;
else if (ctx.Match(k, Invk_previous_adj_)) previous_adj = Rect_ref.parse_(m.ReadStr("v"));
else if (ctx.Match(k, Invk_previous_adj_)) previous_adj = Rect_ref.parse(m.ReadStr("v"));
return this;
}
public static final String Invk_mode = "mode", Invk_mode_ = "mode_", Invk_mode_list = "mode_list"

View File

@@ -75,7 +75,7 @@ public class Xoue_user implements Xou_user, GfoEvMgrOwner, GfoInvkAble {
Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_k004();
bookmarks_add_fmtr.Bld_bfr_many(tmp_bfr, wiki_domain, ttl_full_txt);
byte[] new_entry = tmp_bfr.To_bry_and_rls();
Xoa_ttl bookmarks_ttl = Xoa_ttl.parse_(wiki, Bry_data_bookmarks);
Xoa_ttl bookmarks_ttl = Xoa_ttl.parse(wiki, Bry_data_bookmarks);
Xoae_page bookmarks_page = wiki.Data_mgr().Get_page(bookmarks_ttl, false);
byte[] new_data = Bry_.Add(bookmarks_page.Data_raw(), new_entry);
wiki.Db_mgr().Save_mgr().Data_update(bookmarks_page, new_data);

View File

@@ -52,7 +52,7 @@ public class Xous_window_mgr implements GfoInvkAble {
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_rect)) return rect;
else if (ctx.Match(k, Invk_rect_)) rect = Rect_ref.parse_(m.ReadStr("v"));
else if (ctx.Match(k, Invk_rect_)) rect = Rect_ref.parse(m.ReadStr("v"));
else if (ctx.Match(k, Invk_maximized)) return Yn.Xto_str(maximized);
else if (ctx.Match(k, Invk_maximized_)) maximized = m.ReadYn("v");
return this;

View File

@@ -0,0 +1,125 @@
/*
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.users.bmks; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
import gplx.core.json.*; import gplx.html.*;
import gplx.xowa.users.data.*; import gplx.xowa.users.bmks.*;
import gplx.xowa.html.bridges.*; import gplx.xowa.html.bridges.dbuis.*; import gplx.xowa.html.bridges.dbuis.tbls.*; import gplx.xowa.html.bridges.dbuis.fmtrs.*;
public class Dbui_tbl_itm__bmk implements Dbui_tbl_itm {
private final Xoa_app app; private final Xoud_bmk_itm_tbl tbl;
private final Dbui_tbl_fmtr tbl_fmtr = new Dbui_tbl_fmtr();
private final Dbui_cells_fmtr cells_fmtr = new Dbui_cells_fmtr(); private final Dbui_val_fmtr edit_val_fmtr = Dbui_val_fmtr_.new_edit(); private final Dbui_val_fmtr view_val_fmtr = Dbui_val_fmtr_.new_view();
private final Bry_bfr tmp_bfr = Bry_bfr.new_(255);
private final Bridge_msg_bldr msg_bldr;
public Dbui_tbl_itm__bmk(Xoa_app app, Xoud_bmk_itm_tbl tbl) {this.app = app; this.tbl = tbl; this.msg_bldr = app.Html__bridge_mgr().Msg_bldr();}
public byte[] Key() {return key;} private static final byte[] key = Bry_.new_a7("bmk");
public Dbui_btn_itm[] View_btns() {return view_btns;}
public Dbui_btn_itm[] Edit_btns() {return edit_btns;}
public Dbui_col_itm[] Cols() {return cols;}
public void Reg(Bridge_cmd_mgr bridge_mgr) {
Dbui_cmd_mgr dbui_mgr = Dbui_cmd_mgr.I;
dbui_mgr.Init_by_bridge(bridge_mgr);
dbui_mgr.Add(this);
}
public void Select(Bry_bfr bfr, int owner) {
Xoud_bmk_itm_row[] db_rows = tbl.Select_grp(owner);
byte[] option_link = app.Html__lnki_bldr().Href_(Bry_.new_a7("home"), app.User().Wikii().Ttl_parse(Bry_.new_a7("Help:Options/Bookmarks"))).Img_16x16(gplx.xowa.html.wtrs.Xoh_img_path.Img_option).Bld_to_bry();
byte[] delete_confirm_msg = app.Api_root().Usr().Bookmarks().Delete_confirm() ? Msg__delete_confirm : Bry_.Empty;
tbl_fmtr.Write(bfr, this, option_link, delete_confirm_msg, To_ui_rows(db_rows));
} private static final byte[] Msg__delete_confirm = Bry_.new_a7(" data-dbui-delete_confirm_msg='Are you sure you want to delete this bookmark?'");
public String Del(byte[] row_id, byte[] row_pkey) {
Xoud_bmk_itm_row db_row = Get_db_row(row_pkey); if (db_row == null) return Fail_missing_row(row_pkey);
tbl.Delete(db_row.Id());
return msg_bldr.To_json_str__empty();
}
public String Edit(byte[] row_id, byte[] row_pkey) {
Xoud_bmk_itm_row db_row = Get_db_row(row_pkey); if (db_row == null) return Fail_missing_row(row_pkey);
Dbui_row_itm ui_row = Get_ui_row(db_row);
return Write_cells(edit_val_fmtr, edit_btns, row_id, ui_row);
}
public String Save(byte[] row_id, byte[] row_pkey, Dbui_val_hash vals) {
Xoud_bmk_itm_row db_row = Get_db_row(row_pkey); if (db_row == null) return Fail_missing_row(row_pkey);
byte[] new_name = vals.Get_val_as_bry("name");
byte[] new_url_bry = vals.Get_val_as_bry("url");
byte[] new_comment = vals.Get_val_as_bry("comment");
Xoa_url new_url = app.User().Wikii().Utl__url_parser().Parse(new_url_bry);
if (new_url.Page_bry() == null) return msg_bldr.Clear().Notify_fail_(Err_msg.To_str("Url is invalid", "url", new_url.Raw())).To_json_str();
tbl.Update(db_row.Id(), db_row.Owner(), db_row.Sort(), new_name, new_url.Wiki_bry(), new_url_bry, new_comment);
Dbui_row_itm ui_row = Get_ui_row(row_pkey, new_name, new_url_bry, new_comment);
return Write_cells(view_val_fmtr, view_btns, row_id, ui_row);
}
public String Reorder(byte[][] pkeys, int owner) {
Xoud_bmk_itm_row[] db_rows = tbl.Select_grp(Xoud_bmk_mgr.Owner_root);
int len = db_rows.length; if (len != pkeys.length) return msg_bldr.Clear().Notify_fail_(Err_msg.To_str("Rows have changed")).Notify_hint_("Please reload the page").To_json_str();
for (int i = 0; i < len; ++i) {
int old_pkey = db_rows[i].Id();
int new_pkey = Bry_.To_int_or_neg1(pkeys[i]);
if (old_pkey == new_pkey) continue; // order hasn't changed; EX: 5 in list; 4th moved to 5th; 1 through 3 will have same sort order;
tbl.Update_sort(new_pkey, i);
}
return msg_bldr.To_json_str__empty();
}
public Dbui_row_itm[] To_ui_rows(Xoud_bmk_itm_row[] db_rows) {
int len = db_rows.length;
Dbui_row_itm[] rv = new Dbui_row_itm[len];
for (int i = 0; i < len; ++i)
rv[i] = Get_ui_row(db_rows[i]);
return rv;
}
private String Write_cells(Dbui_val_fmtr val_fmtr, Dbui_btn_itm[] btns, byte[] row_id, Dbui_row_itm row) {
cells_fmtr.Ctor(val_fmtr, btns);
cells_fmtr.Init(row_id, row);
cells_fmtr.XferAry(tmp_bfr, 0);
return app.Html__bridge_mgr().Msg_bldr().Clear().Data("html", tmp_bfr.Xto_bry_and_clear()).To_json_str();
}
private Xoud_bmk_itm_row Get_db_row(byte[] pkey) {
int bmk_id = Bry_.To_int(pkey);
return tbl.Select_or_null(bmk_id);
}
private Dbui_row_itm Get_ui_row(Xoud_bmk_itm_row row) {return Get_ui_row(Int_.Xto_bry(row.Id()), row.Name(), row.Url(), row.Comment());}
private Dbui_row_itm Get_ui_row(byte[] pkey, byte[] name, byte[] url, byte[] comment) {
Dbui_val_itm[] vals = new Dbui_val_itm[3];
vals[0] = new Dbui_val_itm(name, Html_utl.Escape_html_as_bry(tmp_bfr, name));
vals[1] = new Dbui_val_itm(url, url_fmtr.Bld_bry_many(tmp_bfr, Html_utl.Escape_for_atr_val_as_bry(tmp_bfr, Byte_ascii.Apos, url)));
vals[2] = new Dbui_val_itm(comment, Html_utl.Escape_html_as_bry(comment));
return new Dbui_row_itm(this, pkey, vals);
}
private String Fail_missing_row(byte[] row_pkey) {
return msg_bldr.Clear().Notify_fail_(Err_msg.To_str("Item has been deleted", "key", row_pkey)).Notify_hint_("Please reload the page").To_json_str();
}
private static final Dbui_col_itm[] cols = new Dbui_col_itm[]
{ new Dbui_col_itm(Dbui_col_itm.Type_id_str , 150, "name" , "Name")
, new Dbui_col_itm(Dbui_col_itm.Type_id_str , 300, "url" , "Url")
, new Dbui_col_itm(Dbui_col_itm.Type_id_text , 300, "comment" , "Comment")
};
private static final Dbui_btn_itm[] view_btns = new Dbui_btn_itm[]
{ new Dbui_btn_itm("rows__edit" , "edit.png" , "edit")
, new Dbui_btn_itm("rows__delete" , "delete.png" , "delete")
};
private static final Dbui_btn_itm[] edit_btns = new Dbui_btn_itm[]
{ new Dbui_btn_itm("rows__save" , "save.png" , "save")
, new Dbui_btn_itm("rows__cancel" , "cancel.png" , "cancel")
};
private static final Bry_fmtr url_fmtr = Bry_fmtr.new_("<a href='/site/~{url}'>~{url}</a>", "url");
public static Dbui_tbl_itm__bmk get_or_new(Xoa_app app, Xoud_bmk_itm_tbl db_tbl) {
if (I == null) {
I = new Dbui_tbl_itm__bmk(app, db_tbl);
I.Reg(app.Html__bridge_mgr().Cmd_mgr());
}
return I;
} private static Dbui_tbl_itm__bmk I;
}

View File

@@ -76,7 +76,7 @@ public class Xoud_bmk_itm_tbl implements RlsAble {
int rv = 0;
if (rdr.Move_next()) {
Object rv_obj = rdr.Read_obj(fld_sort);
rv = rv_obj == null ? 0 : Int_.cast_(rv_obj) + 1;
rv = rv_obj == null ? 0 : Int_.cast(rv_obj) + 1;
}
return rv;
}

View File

@@ -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.users.bmks; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
import gplx.core.primitives.*;
import gplx.xowa.html.bridges.dbuis.tbls.*;
import gplx.xowa.users.data.*; import gplx.xowa.specials.*;
public class Xows_bmk_page implements Xows_page {
public Xows_special_meta Special_meta() {return Xows_special_meta_.Itm__bookmarks;}
public void Special_gen(Xowe_wiki wiki, Xoae_page page, Xoa_url url, Xoa_ttl ttl) {
Xoa_app app = wiki.App();
Dbui_tbl_itm__bmk ui_tbl = Dbui_tbl_itm__bmk.get_or_new(app, app.User().User_db_mgr().Bmk_mgr().Tbl__itm());
page.Html_data().Head_mgr().Itm__dbui().Init(app).Enabled_y_();
Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_m001();
ui_tbl.Select(bfr, Xoud_bmk_mgr.Owner_root);
page.Hdump_data().Body_(bfr.To_bry_and_rls());
}
}

View File

@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.dbs.metas.*;
import gplx.xowa.files.caches.*;
import gplx.xowa.users.bmks.*;
import gplx.xowa.users.bmks.*; import gplx.xowa.users.history.*;
public class Xou_db_file {
private final Db_conn conn;
public Xou_db_file(Db_conn conn) {

View File

@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
import gplx.core.threads.*; import gplx.dbs.*; import gplx.dbs.metas.updates.*; import gplx.dbs.metas.*;
import gplx.xowa.files.caches.*;
import gplx.xowa.users.bmks.*;
import gplx.xowa.users.bmks.*; import gplx.xowa.users.history.*;
public class Xou_db_mgr {
private final Xoa_app app;
private final Xoud_id_mgr id_mgr;
@@ -41,6 +41,7 @@ public class Xou_db_mgr {
this.cache_mgr = new Xou_cache_mgr(app.Wiki_mgri(), app.Fsys_mgr().File_dir(), db_file);
this.xfer_itm_finder = new Xou_file_itm_finder(cache_mgr);
this.bmk_mgr.Conn_(conn, created);
// this.history_mgr.Conn_(conn, created);
if (drd) {
cfg_mgr.Conn_(conn, created);
site_mgr.Conn_(conn, created);

View File

@@ -25,7 +25,7 @@ public class Xoud_cfg_mgr {
}
public int Select_int_or(String grp, String key, int or) {
String rv = Select_str_or(grp, key, null);
return rv == null ? or : Int_.parse_or_(rv, or);
return rv == null ? or : Int_.parse_or(rv, or);
}
public byte[] Select_bry_or(String key, byte[] or) {return Select_bry_or("" , key, or);}
public byte[] Select_bry_or(String grp, String key, byte[] or) {

View File

@@ -48,7 +48,7 @@ class Xoud_opt_scope_parser {
}
public Xoud_opt_scope Parse_itm(byte[] src, int bgn, int end) {
int lang_dot = Bry_finder.Find_fwd(src, Byte_ascii.Dot, bgn, end); if (lang_dot == Bry_finder.Not_found) return Warn("scope.parse.missing_lang_dot: src=~{0}", src, bgn, end);
int lang_id = Int_.MinValue;
int lang_id = Int_.Min_value;
if (lang_dot == 1 && src[bgn] == Byte_ascii.Star)
lang_id = Xoud_opt_scope.Lang_id_wildcard;
else {

View File

@@ -22,7 +22,7 @@ class Xoud_user_mgr {
public void Conn_(Db_conn conn, boolean created) {tbl.Conn_(conn, created);}
public int Get_id_or_new(String name) {
int rv = tbl.Select_id_by_name(name);
if (rv == Int_.MinValue) {
if (rv == Int_.Min_value) {
rv = tbl.Select_id_next();
tbl.Insert(rv, name);
}
@@ -52,7 +52,7 @@ class Xoud_user_tbl {
public int Select_id_by_name(String name) {
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld_name).Crt_str(fld_name, name).Exec_select__rls_auto();
try {
return rdr.Move_next() ? rdr.Read_int(fld_id) : Int_.MinValue;
return rdr.Move_next() ? rdr.Read_int(fld_id) : Int_.Min_value;
}
finally {rdr.Rls();}
}

View File

@@ -0,0 +1,95 @@
/*
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.users.history; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
import gplx.core.json.*; import gplx.html.*;
import gplx.xowa.users.data.*; import gplx.xowa.users.bmks.*;
import gplx.xowa.html.bridges.*; import gplx.xowa.html.bridges.dbuis.*; import gplx.xowa.html.bridges.dbuis.tbls.*; import gplx.xowa.html.bridges.dbuis.fmtrs.*;
public class Dbui_tbl_itm__history implements Dbui_tbl_itm {
private final Xoa_app app; private final Xoud_history_tbl tbl;
private final Dbui_tbl_fmtr tbl_fmtr = new Dbui_tbl_fmtr();
private final Bry_bfr tmp_bfr = Bry_bfr.new_(255);
private final Bridge_msg_bldr msg_bldr;
public Dbui_tbl_itm__history(Xoa_app app, Xoud_history_tbl tbl) {this.app = app; this.tbl = tbl; this.msg_bldr = app.Html__bridge_mgr().Msg_bldr();}
public byte[] Key() {return key;} private static final byte[] key = Bry_.new_a7("history");
public Dbui_btn_itm[] View_btns() {return view_btns;}
public Dbui_btn_itm[] Edit_btns() {return Dbui_btn_itm.Ary_empty;}
public Dbui_col_itm[] Cols() {return cols;}
public void Reg(Bridge_cmd_mgr bridge_mgr) {
Dbui_cmd_mgr dbui_mgr = Dbui_cmd_mgr.I;
dbui_mgr.Init_by_bridge(bridge_mgr);
dbui_mgr.Add(this);
}
private final List_adp select_list = List_adp_.new_();
public void Select(Bry_bfr bfr, int top) {
tbl.Select_by_top(select_list, 100);
Xoud_history_row[] db_rows = (Xoud_history_row[])select_list.To_ary_and_clear(Xoud_history_row.class);
byte[] option_link = app.Html__lnki_bldr().Href_(Bry_.new_a7("home"), app.User().Wikii().Ttl_parse(Bry_.new_a7("Help:Options/PageHistory"))).Img_16x16(gplx.xowa.html.wtrs.Xoh_img_path.Img_option).Bld_to_bry();
byte[] delete_confirm_msg = app.Api_root().Usr().Bookmarks().Delete_confirm() ? Msg__delete_confirm : Bry_.Empty;
tbl_fmtr.Write(bfr, this, option_link, delete_confirm_msg, To_ui_rows(db_rows));
} private static final byte[] Msg__delete_confirm = Bry_.new_a7(" data-dbui-delete_confirm_msg='Are you sure you want to delete this row?'");
public String Del(byte[] row_id, byte[] row_pkey) {
Xoud_history_row db_row = Get_db_row(row_pkey); if (db_row == null) return Fail_missing_row(row_pkey);
tbl.Delete(db_row.Id());
return msg_bldr.To_json_str__empty();
}
public String Edit(byte[] row_id, byte[] row_pkey) {throw Err_.new_unimplemented();}
public String Save(byte[] row_id, byte[] row_pkey, Dbui_val_hash vals) {throw Err_.new_unimplemented();}
public String Reorder(byte[][] pkeys, int owner) {throw Err_.new_unimplemented();}
public Dbui_row_itm[] To_ui_rows(Xoud_history_row[] db_rows) {
int len = db_rows.length;
Dbui_row_itm[] rv = new Dbui_row_itm[len];
for (int i = 0; i < len; ++i)
rv[i] = Get_ui_row(db_rows[i]);
return rv;
}
private Xoud_history_row Get_db_row(byte[] pkey) {
int id = Bry_.To_int(pkey);
return tbl.Select_or_null(id);
}
private Dbui_row_itm Get_ui_row(Xoud_history_row row) {return Get_ui_row(Int_.Xto_bry(row.Id()), row.Wiki(), row.Url(), row.Count(), row.Time());}
private Dbui_row_itm Get_ui_row(byte[] pkey, byte[] wiki, byte[] url, int count, DateAdp time) {
Dbui_val_itm[] vals = new Dbui_val_itm[4];
vals[0] = new Dbui_val_itm(url, url_fmtr.Bld_bry_many(tmp_bfr, Html_utl.Escape_for_atr_val_as_bry(tmp_bfr, Byte_ascii.Apos, url)));
vals[1] = new Dbui_val_itm(wiki, wiki);
byte[] count_bry = Int_.Xto_bry(count);
vals[2] = new Dbui_val_itm(count_bry, count_bry);
byte[] time_bry = Bry_.new_u8(time.XtoStr_fmt_yyyy_MM_dd_HH_mm_ss());
vals[3] = new Dbui_val_itm(time_bry, time_bry);
return new Dbui_row_itm(this, pkey, vals);
}
private String Fail_missing_row(byte[] row_pkey) {
return msg_bldr.Clear().Notify_fail_(Err_msg.To_str("Item has been deleted", "key", row_pkey)).Notify_hint_("Please reload the page").To_json_str();
}
private static final Dbui_col_itm[] cols = new Dbui_col_itm[]
{ new Dbui_col_itm(Dbui_col_itm.Type_id_str , 300, "page" , "Page")
, new Dbui_col_itm(Dbui_col_itm.Type_id_str , 150, "wiki" , "Wiki")
, new Dbui_col_itm(Dbui_col_itm.Type_id_int , 80, "views" , "Views")
, new Dbui_col_itm(Dbui_col_itm.Type_id_datetime, 100, "time" , "Time")
};
private static final Dbui_btn_itm[] view_btns = new Dbui_btn_itm[]
{ new Dbui_btn_itm("rows__delete" , "delete.png" , "delete")
};
private static final Bry_fmtr url_fmtr = Bry_fmtr.new_("<a href='/site/~{url}'>~{url}</a>", "url");
public static Dbui_tbl_itm__history get_or_new(Xoa_app app, Xoud_history_tbl db_tbl) {
if (I == null) {
I = new Dbui_tbl_itm__history(app, db_tbl);
I.Reg(app.Html__bridge_mgr().Cmd_mgr());
}
return I;
} private static Dbui_tbl_itm__history I;
}

View File

@@ -58,7 +58,7 @@ public class Xou_history_mgr implements GfoInvkAble {
Add(url, ttl, page_ttl);
}
public void Add(Xoa_url url, Xoa_ttl ttl, byte[] page_ttl) {
if (gplx.xowa.users.data.Xoud_history_mgr.Skip_history(ttl)) return;
if (gplx.xowa.users.history.Xoud_history_mgr.Skip_history(ttl)) return;
if (!load_chk) Load();
byte[] key = Xou_history_itm.key_(url.Wiki_bry(), page_ttl);
Xou_history_itm itm = (Xou_history_itm)itms.Get_by(key);

View File

@@ -65,7 +65,7 @@ class Xou_history_mgr_fxt {
}
public Xou_history_mgr_fxt Add_one(String ttl_str, String arg_str) {
byte[] ttl_bry = Bry_.new_u8(ttl_str);
Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ttl_bry);
Xoa_ttl ttl = Xoa_ttl.parse(wiki, ttl_bry);
Xoae_page page = Xoae_page.test_(wiki, ttl);
page.Revision_data().Modified_on_(DateAdp_.Now());
byte[] url_bry = ttl_bry;

View File

@@ -15,14 +15,14 @@ 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.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
package gplx.xowa.users.history; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
import gplx.core.threads.*; import gplx.dbs.*;
import gplx.xowa.specials.*;
public class Xoud_history_mgr implements GfoInvkAble {
private Xoud_history_tbl history_tbl;
public void Conn_(Db_conn new_conn, boolean created) {
history_tbl = new Xoud_history_tbl(new_conn);
if (created) history_tbl.Create_tbl();
public void Conn_(Db_conn conn, boolean created) {
this.history_tbl = new Xoud_history_tbl(conn);
if (!conn.Meta_tbl_exists(history_tbl.Tbl_name())) history_tbl.Create_tbl();
}
public void Update_async(Gfo_async_mgr async_mgr, Xoa_ttl ttl, Xoa_url url) {
// if (Skip_history(ttl)) return;

View File

@@ -15,7 +15,7 @@ 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.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
package gplx.xowa.users.history; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
public class Xoud_history_row {
public Xoud_history_row(int id, byte[] wiki, byte[] url, DateAdp time, int count) {
this.id = id;

View File

@@ -15,9 +15,8 @@ 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.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
package gplx.xowa.users.history; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
import gplx.xowa.specials.*;
import gplx.xowa.specials.xowa.bookmarks.*;
public class Xoud_history_special implements Xows_page {
public Xows_special_meta Special_meta() {return Xows_special_meta_.Itm__page_history;}
public void Special_gen(Xowe_wiki wiki, Xoae_page page, Xoa_url url, Xoa_ttl ttl) {

View File

@@ -15,7 +15,7 @@ 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.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
package gplx.xowa.users.history; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*;
import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.metas.*; import gplx.dbs.metas.updates.*;
public class Xoud_history_tbl implements RlsAble {
private final String tbl_name = "user_history"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
@@ -31,6 +31,7 @@ public class Xoud_history_tbl implements RlsAble {
stmt_insert = stmt_update = stmt_delete = stmt_select_by_page = stmt_select_by_top = null;
conn.Rls_reg(this);
}
public String Tbl_name() {return tbl_name;}
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_wiki, fld_url)));}
public void Rls() {
stmt_insert = Db_stmt_.Rls(stmt_insert);

View File

@@ -179,6 +179,6 @@ class Gfui_html_mok extends Xog_html_itm { private Hash_adp elem_atrs = Hash_adp
return (String)elem_atrs.Get_by(id + "." + atr_key);
}
@Override public boolean Html_elem_atr_get_bool(String id, String atr_key) {
return Bool_.parse_((String)elem_atrs.Get_by(id + "." + atr_key));
return Bool_.parse((String)elem_atrs.Get_by(id + "." + atr_key));
}
}