From b2781ffc9d9f5f8e4665dafea47c338491a4ff0b Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Fri, 10 Feb 2017 15:19:12 -0500 Subject: [PATCH] Personal_wiki: Refactor special pages --- .../src/gplx/gfui/kits/core/Gfui_dlg_dir.java | 24 +++ .../gplx/gfui/kits/core/Gfui_dlg_dir_.java | 27 ++++ 150_gfui/src/gplx/gfui/kits/core/Swt_kit.java | 2 + .../src/gplx/gfui/kits/swts/Swt_dlg_dir.java | 31 ++++ 400_xowa/src/gplx/fsdb/Fsdb_db_mgr_.java | 2 +- 400_xowa/src/gplx/xowa/Xoae_app.java | 2 +- 400_xowa/src/gplx/xowa/Xowe_wiki.java | 2 +- .../src/gplx/xowa/addons/Xoax_addon_mgr.java | 2 +- .../users/wikis/regys/Xou_regy_addon.java | 69 -------- .../regys/specials/itms/Xouw_itm_mgr.java | 53 ------- .../addons/wikis/directorys/Xowdir_addon.java | 64 ++++++++ .../directorys/dbs/Xowdir_db_mgr.java} | 10 +- .../directorys/dbs/Xowdir_wiki_itm.java} | 18 +-- .../directorys/dbs/Xowdir_wiki_json.java | 48 ++++++ .../directorys/dbs/Xowdir_wiki_tbl.java} | 45 +++--- .../specials/items/Xowdir_item_bridge.java} | 14 +- .../specials/items/Xowdir_item_doc.java} | 21 +-- .../specials/items/Xowdir_item_html.java} | 28 ++-- .../specials/items/Xowdir_item_mgr.java | 148 ++++++++++++++++++ .../specials/items/Xowdir_item_special.java} | 10 +- .../specials/items}/bldrs/Xodb_wiki_data.java | 2 +- .../specials/items}/bldrs/Xodb_wiki_db.java | 2 +- .../items}/bldrs/Xodb_wiki_db_tid.java | 2 +- .../specials/items}/bldrs/Xodb_wiki_mgr.java | 2 +- .../specials/items}/bldrs/Xopg_db_mgr.java | 6 +- .../specials/items}/bldrs/Xow_db_mkr.java | 10 +- .../items/bldrs/Xow_wiki_factory.java | 47 ++++++ .../specials/lists/Xowdir_list_doc.java} | 11 +- .../specials/lists/Xowdir_list_html.java} | 20 +-- .../specials/lists/Xowdir_list_special.java} | 10 +- .../src/gplx/xowa/files/Xow_file_mgr.java | 2 +- .../src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java | 4 + .../src/gplx/xowa/guis/cbks/Xog_cbk_mgr.java | 3 + .../src/gplx/xowa/guis/cmds/Xog_cmd_itm_.java | 3 + ...__curly.java => Texvc_lxr__curly_bgn.java} | 11 +- .../texvcs/lxrs/Texvc_lxr__curly_end.java | 28 ++++ 36 files changed, 539 insertions(+), 244 deletions(-) create mode 100644 150_gfui/src/gplx/gfui/kits/core/Gfui_dlg_dir.java create mode 100644 150_gfui/src/gplx/gfui/kits/core/Gfui_dlg_dir_.java create mode 100644 150_gfui/src/gplx/gfui/kits/swts/Swt_dlg_dir.java delete mode 100644 400_xowa/src/gplx/xowa/addons/users/wikis/regys/Xou_regy_addon.java delete mode 100644 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_mgr.java create mode 100644 400_xowa/src/gplx/xowa/addons/wikis/directorys/Xowdir_addon.java rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/dbs/Xouw_db_mgr.java => wikis/directorys/dbs/Xowdir_db_mgr.java} (64%) rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/dbs/Xou_wiki_itm.java => wikis/directorys/dbs/Xowdir_wiki_itm.java} (53%) create mode 100644 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json.java rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/dbs/Xou_wiki_tbl.java => wikis/directorys/dbs/Xowdir_wiki_tbl.java} (59%) rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/itms/Xouw_itm_bridge.java => wikis/directorys/specials/items/Xowdir_item_bridge.java} (72%) rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/itms/Xouw_itm_doc.java => wikis/directorys/specials/items/Xowdir_item_doc.java} (61%) rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/itms/Xouw_itm_html.java => wikis/directorys/specials/items/Xowdir_item_html.java} (64%) create mode 100644 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_mgr.java rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/itms/Xouw_itm_special.java => wikis/directorys/specials/items/Xowdir_item_special.java} (67%) rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/itms => wikis/directorys/specials/items}/bldrs/Xodb_wiki_data.java (80%) rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/itms => wikis/directorys/specials/items}/bldrs/Xodb_wiki_db.java (84%) rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/itms => wikis/directorys/specials/items}/bldrs/Xodb_wiki_db_tid.java (74%) rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/itms => wikis/directorys/specials/items}/bldrs/Xodb_wiki_mgr.java (79%) rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/itms => wikis/directorys/specials/items}/bldrs/Xopg_db_mgr.java (81%) rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/itms => wikis/directorys/specials/items}/bldrs/Xow_db_mkr.java (84%) create mode 100644 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_wiki_factory.java rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/lists/Xouw_list_doc.java => wikis/directorys/specials/lists/Xowdir_list_doc.java} (63%) rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/lists/Xouw_list_html.java => wikis/directorys/specials/lists/Xowdir_list_html.java} (67%) rename 400_xowa/src/gplx/xowa/addons/{users/wikis/regys/specials/lists/Xouw_list_special.java => wikis/directorys/specials/lists/Xowdir_list_special.java} (61%) rename 400_xowa/src/gplx/xowa/xtns/math/texvcs/lxrs/{Texvc_lxr__curly.java => Texvc_lxr__curly_bgn.java} (75%) create mode 100644 400_xowa/src/gplx/xowa/xtns/math/texvcs/lxrs/Texvc_lxr__curly_end.java diff --git a/150_gfui/src/gplx/gfui/kits/core/Gfui_dlg_dir.java b/150_gfui/src/gplx/gfui/kits/core/Gfui_dlg_dir.java new file mode 100644 index 000000000..4e7f450f7 --- /dev/null +++ b/150_gfui/src/gplx/gfui/kits/core/Gfui_dlg_dir.java @@ -0,0 +1,24 @@ +/* +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 . +*/ +package gplx.gfui.kits.core; import gplx.*; import gplx.gfui.*; import gplx.gfui.kits.*; +public interface Gfui_dlg_dir { + Gfui_dlg_dir Init_msg_(String v); + Gfui_dlg_dir Init_text_(String v); + Gfui_dlg_dir Init_dir_(Io_url v); + String Ask(); +} diff --git a/150_gfui/src/gplx/gfui/kits/core/Gfui_dlg_dir_.java b/150_gfui/src/gplx/gfui/kits/core/Gfui_dlg_dir_.java new file mode 100644 index 000000000..ac9349e24 --- /dev/null +++ b/150_gfui/src/gplx/gfui/kits/core/Gfui_dlg_dir_.java @@ -0,0 +1,27 @@ +/* +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 . +*/ +package gplx.gfui.kits.core; import gplx.*; import gplx.gfui.*; import gplx.gfui.kits.*; +public class Gfui_dlg_dir_ { + public static final Gfui_dlg_dir Noop = new Gfui_dlg_dir__noop(); +} +class Gfui_dlg_dir__noop implements Gfui_dlg_dir { + public String Ask() {return "";} + public Gfui_dlg_dir Init_msg_(String v) {return this;} + public Gfui_dlg_dir Init_text_(String v) {return this;} + public Gfui_dlg_dir Init_dir_(Io_url v) {return this;} +} diff --git a/150_gfui/src/gplx/gfui/kits/core/Swt_kit.java b/150_gfui/src/gplx/gfui/kits/core/Swt_kit.java index 24fe1dd33..e96b775bf 100644 --- a/150_gfui/src/gplx/gfui/kits/core/Swt_kit.java +++ b/150_gfui/src/gplx/gfui/kits/core/Swt_kit.java @@ -220,6 +220,7 @@ public class Swt_kit implements Gfui_kit { return rv; } public Gfui_dlg_file New_dlg_file(byte type, String msg) {return new Swt_dlg_file(type, shell).Init_msg_(msg);} + public Gfui_dlg_dir New_dlg_dir(String msg) {return new Swt_dlg_dir(shell).Init_msg_(msg);} public Gfui_dlg_msg New_dlg_msg(String msg) {return new Swt_dlg_msg(shell).Init_msg_(msg);} public ImageAdp New_img_load(Io_url url) { if (url == Io_url_.Empty) return ImageAdp_.Null; @@ -264,6 +265,7 @@ public class Swt_kit implements Gfui_kit { } } else if (String_.Eq(k, Invk_ask_file)) return this.New_dlg_file(Gfui_kit_.File_dlg_type_open, m.Args_getAt(0).Val_to_str_or_empty()).Ask(); + else if (String_.Eq(k, "ask_dir")) return this.New_dlg_dir(m.Args_getAt(0).Val_to_str_or_empty()).Ask(); else if (String_.Eq(k, Invk_shell_close)) shell.close(); return this; } diff --git a/150_gfui/src/gplx/gfui/kits/swts/Swt_dlg_dir.java b/150_gfui/src/gplx/gfui/kits/swts/Swt_dlg_dir.java new file mode 100644 index 000000000..c04fe742d --- /dev/null +++ b/150_gfui/src/gplx/gfui/kits/swts/Swt_dlg_dir.java @@ -0,0 +1,31 @@ +/* +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 . +*/ +package gplx.gfui.kits.swts; import gplx.*; import gplx.gfui.*; import gplx.gfui.kits.*; +import gplx.gfui.kits.core.*; +import org.eclipse.swt.widgets.DirectoryDialog; +import org.eclipse.swt.widgets.Shell; +public class Swt_dlg_dir implements Gfui_dlg_dir { + private final DirectoryDialog under; + public Swt_dlg_dir(Shell shell) { + this.under = new DirectoryDialog(shell); + } + public Gfui_dlg_dir Init_text_(String v) {under.setText(v); return this;} + public Gfui_dlg_dir Init_msg_(String v) {under.setMessage(v); return this;} + public Gfui_dlg_dir Init_dir_(Io_url v) {under.setFilterPath(v.Xto_api()); return this;} + public String Ask() {return under.open();} +} diff --git a/400_xowa/src/gplx/fsdb/Fsdb_db_mgr_.java b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr_.java index d5ffd232e..e03cb37ac 100644 --- a/400_xowa/src/gplx/fsdb/Fsdb_db_mgr_.java +++ b/400_xowa/src/gplx/fsdb/Fsdb_db_mgr_.java @@ -35,7 +35,7 @@ public class Fsdb_db_mgr_ { // FOLDER.RENAME: handle renamed folders; EX:"/wiki/en.wikipedia.org-2016-12" DATE:2017-02-01 String domain_str = wiki.Domain_str(); try { - String cfg_domain_str = wiki.Data__core_mgr().Db__core().Tbl__cfg().Select_str("xowa.bldr.session", "wiki_domain"); + String cfg_domain_str = wiki.Data__core_mgr().Db__core().Tbl__cfg().Select_str_or("xowa.bldr.session", "wiki_domain", domain_str); if (!String_.Eq(domain_str, cfg_domain_str)) { domain_str = cfg_domain_str; Gfo_usr_dlg_.Instance.Note_many("", "", "fsdb.db_core.init: fsys.domain doesn't match db.domain; import db.*; fsys=~{0} db=~{1}", domain_str, cfg_domain_str); diff --git a/400_xowa/src/gplx/xowa/Xoae_app.java b/400_xowa/src/gplx/xowa/Xoae_app.java index 21d0822fe..ba7b1f757 100644 --- a/400_xowa/src/gplx/xowa/Xoae_app.java +++ b/400_xowa/src/gplx/xowa/Xoae_app.java @@ -175,7 +175,7 @@ public class Xoae_app implements Xoa_app, Gfo_invk { // init user wiki user.Wiki().Init_assert(); // NOTE: must assert wiki and load langs first, else will be asserted during Portal_mgr().Init(), which will cause IndexOutOfBounds; DATE:2014-10-04 - gplx.xowa.addons.users.wikis.regys.Xou_regy_addon.Init(this); + gplx.xowa.addons.wikis.directorys.Xowdir_addon.Init(this); } public byte Stage() {return stage;} public Xoae_app Stage_(byte v) {stage = v; return this;} private byte stage = Xoa_stage_.Tid_ctor; public boolean Term_cbk() { diff --git a/400_xowa/src/gplx/xowa/Xowe_wiki.java b/400_xowa/src/gplx/xowa/Xowe_wiki.java index 27d7b4c5b..dcded4877 100644 --- a/400_xowa/src/gplx/xowa/Xowe_wiki.java +++ b/400_xowa/src/gplx/xowa/Xowe_wiki.java @@ -189,7 +189,7 @@ public class Xowe_wiki implements Xow_wiki, Gfo_invk, Gfo_evt_itm { // FOLDER.RENAME: handle renamed folders; EX:"/wiki/en.wikipedia.org-2016-12" DATE:2017-02-01 try { - byte[] cfg_domain_bry = db_mgr_sql.Core_data_mgr().Db__core().Tbl__cfg().Select_bry("xowa.bldr.session", "wiki_domain"); + byte[] cfg_domain_bry = db_mgr_sql.Core_data_mgr().Db__core().Tbl__cfg().Select_bry_or("xowa.bldr.session", "wiki_domain", domain_bry); // NOTE: or is "wiki.domain" for user_wikis if (!Bry_.Eq(cfg_domain_bry, domain_bry)) { // set wikidata vars Xow_domain_itm cfg_domain_itm = Xow_domain_itm_.parse(cfg_domain_bry); diff --git a/400_xowa/src/gplx/xowa/addons/Xoax_addon_mgr.java b/400_xowa/src/gplx/xowa/addons/Xoax_addon_mgr.java index e12fb592e..c2cc45f58 100644 --- a/400_xowa/src/gplx/xowa/addons/Xoax_addon_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/Xoax_addon_mgr.java @@ -69,7 +69,7 @@ public class Xoax_addon_mgr { , new gplx.xowa.addons.bldrs.centrals .Xobc_task_addon() , new gplx.xowa.addons.apps.helps.logs .Xolog_addon() , new gplx.xowa.addons.wikis.pages.syncs .Xosync_addon() - , new gplx.xowa.addons.users.wikis.regys .Xou_regy_addon() + , new gplx.xowa.addons.wikis.directorys .Xowdir_addon() , new gplx.xowa.addons.apps.cfgs .Xoa_cfg_addon() , new gplx.xowa.addons.apps.updates .Xoa_update_addon() diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/Xou_regy_addon.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/Xou_regy_addon.java deleted file mode 100644 index cba02c8d8..000000000 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/Xou_regy_addon.java +++ /dev/null @@ -1,69 +0,0 @@ -/* -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 . -*/ -package gplx.xowa.addons.users.wikis.regys; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; -import gplx.xowa.addons.users.wikis.regys.dbs.*; -import gplx.xowa.addons.users.wikis.regys.specials.itms.*; import gplx.xowa.addons.users.wikis.regys.specials.lists.*; -import gplx.xowa.htmls.bridges.*; -import gplx.dbs.*; -import gplx.xowa.specials.*; -public class Xou_regy_addon implements Xoax_addon_itm, Xoax_addon_itm__special, Xoax_addon_itm__json { - public Xow_special_page[] Special_pages() { - return new Xow_special_page[] - { Xouw_itm_special.Prototype - , Xouw_list_special.Prototype - }; - } - public Bridge_cmd_itm[] Json_cmds() { - return new Bridge_cmd_itm[] - { Xouw_itm_bridge.Prototype - }; - } - - public String Addon__key() {return ADDON__KEY;} private static final String ADDON__KEY = "xowa.user.wiki.regy"; -// public static Xou_regy_addon Addon__get(Xow_wiki wiki) { -// Xou_regy_addon rv = (Xou_regy_addon)wiki.Addon_mgr().Itms__get_or_null(ADDON__KEY); -// if (rv == null) { -// rv = new Xou_regy_addon(wiki.App().User().User_db_mgr().Conn()); -// wiki.Addon_mgr().Itms__add(rv); -// } -// return rv; -// } - public static void Init(Xoae_app app) { - // exit if none found - Db_conn conn = app.User().User_db_mgr().Conn(); - if (!conn.Meta_tbl_exists(Xou_wiki_tbl.Tbl_name_dflt)) return; - - // register - Xouw_db_mgr db_mgr = new Xouw_db_mgr(conn); - Xou_wiki_itm[] itms = db_mgr.Tbl__wiki().Select_all(); - int len = itms.length; - for (int i = 0; i < len; ++i) { - Xou_wiki_itm itm = itms[i]; - Xowe_wiki wiki = new Xowe_wiki - ( app - , gplx.xowa.langs.Xol_lang_itm_.Lang_en_make(app.Lang_mgr()) - , gplx.xowa.wikis.nss.Xow_ns_mgr_.default_(gplx.xowa.langs.cases.Xol_case_mgr_.A7()) - , gplx.xowa.wikis.domains.Xow_domain_itm_.parse(Bry_.new_u8(itm.Domain())) - , itm.Url().OwnerDir()); - wiki.Appe().Wiki_mgr().Add(wiki); - wiki.Init_by_wiki__force_and_mark_inited(); - wiki.Db_mgr_as_sql().Save_mgr().Create_enabled_(true); - app.User().Wikii().Xwiki_mgr().Add_by_atrs(itm.Domain(), itm.Domain()); - } - } -} diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_mgr.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_mgr.java deleted file mode 100644 index 1949a9cbc..000000000 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_mgr.java +++ /dev/null @@ -1,53 +0,0 @@ -/* -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 . -*/ -package gplx.xowa.addons.users.wikis.regys.specials.itms; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; -import gplx.langs.jsons.*; -import gplx.dbs.sys.*; import gplx.xowa.addons.users.wikis.regys.dbs.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs.*; -import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.data.*; -import gplx.xowa.langs.cases.*; -class Xouw_itm_mgr { - private final Xoa_app app; - public Xouw_itm_mgr(Xoa_app app) { - this.app = app; - } - public void Save(Json_nde args) {Save(args.Get_as_int("id"), args.Get_as_str("domain"), args.Get_as_str("name"), args.Get_as_str("dir"));} - public void Save(int id, String domain, String name, String dir_str) { - boolean itm_is_new = false; - // get next id if none provided - if (id == -1) { - itm_is_new = true; - Db_sys_mgr sys_mgr = new Db_sys_mgr(app.User().User_db_mgr().Conn()); - id = sys_mgr.Autonum_next("user.wikis.id"); - } - - // insert into user_db.user_wiki - Xouw_db_mgr db_mgr = new Xouw_db_mgr(app.User().User_db_mgr().Conn()); - Io_url dir_url = Io_url_.new_dir_infer(dir_str); - Io_url fil_url = dir_url.GenSubFil(domain + ".xowa"); - db_mgr.Tbl__wiki().Upsert(id, domain, name, fil_url); - if (itm_is_new) - Xow_db_mkr.Create_wiki(new Xodb_wiki_data(domain, fil_url)); - } - public void Delete(Json_nde args) {Delete(args.Get_as_int("id"));} - public void Delete(int id) { - Xouw_db_mgr db_mgr = new Xouw_db_mgr(app.User().User_db_mgr().Conn()); - Xou_wiki_itm itm = db_mgr.Tbl__wiki().Select_by_id_or_null(id); - if (itm == null) throw Err_.new_wo_type("wiki does not exist", "id", id); - db_mgr.Tbl__wiki().Delete_by_id(id); - } -} diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/Xowdir_addon.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/Xowdir_addon.java new file mode 100644 index 000000000..18d20a6e4 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/Xowdir_addon.java @@ -0,0 +1,64 @@ +/* +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 . +*/ +package gplx.xowa.addons.wikis.directorys; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; +import gplx.xowa.addons.wikis.directorys.dbs.*; +import gplx.xowa.addons.wikis.directorys.specials.items.*; import gplx.xowa.addons.wikis.directorys.specials.lists.*; +import gplx.xowa.htmls.bridges.*; +import gplx.dbs.*; +import gplx.xowa.specials.*; +public class Xowdir_addon implements Xoax_addon_itm, Xoax_addon_itm__special, Xoax_addon_itm__json { + public Xow_special_page[] Special_pages() { + return new Xow_special_page[] + { Xowdir_item_special.Prototype + , Xowdir_list_special.Prototype + }; + } + public Bridge_cmd_itm[] Json_cmds() { + return new Bridge_cmd_itm[] + { Xowdir_item_bridge.Prototype + }; + } + + public String Addon__key() {return ADDON__KEY;} private static final String ADDON__KEY = "xowa.user.wiki.regy"; +// public static Xowdir_addon Addon__get(Xow_wiki wiki) { +// Xowdir_addon rv = (Xowdir_addon)wiki.Addon_mgr().Itms__get_or_null(ADDON__KEY); +// if (rv == null) { +// rv = new Xowdir_addon(wiki.App().User().User_db_mgr().Conn()); +// wiki.Addon_mgr().Itms__add(rv); +// } +// return rv; +// } + public static void Init(Xoae_app app) { + // exit if none found + Db_conn conn = app.User().User_db_mgr().Conn(); + if (!conn.Meta_tbl_exists(Xowdir_wiki_tbl.Tbl_name_dflt)) return; + + // register + Xowdir_db_mgr db_mgr = new Xowdir_db_mgr(conn); + Xowdir_wiki_itm[] itms = db_mgr.Tbl__wiki().Select_all(); + int len = itms.length; + for (int i = 0; i < len; ++i) { + Xowdir_wiki_itm itm = itms[i]; + try { + gplx.xowa.addons.wikis.directorys.specials.items.bldrs.Xow_wiki_factory.Load_personal(app, Bry_.new_u8(itm.Domain()), itm.Url().OwnerDir()); + } catch (Exception exc) {// handles failures if wiki is deleted, but item is still in wiki_list table + Gfo_usr_dlg_.Instance.Warn_many("", "", "personal_wiki: failed to open personal wiki; domain=~{0} url=~{1} err=~{2}", itm.Domain(), itm.Url(), Err_.Message_gplx_log(exc)); + } + } + } +} diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xouw_db_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_db_mgr.java similarity index 64% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xouw_db_mgr.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_db_mgr.java index 67243734c..a5c83b003 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xouw_db_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_db_mgr.java @@ -15,12 +15,12 @@ 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 . */ -package gplx.xowa.addons.users.wikis.regys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; +package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.dbs.*; -public class Xouw_db_mgr { - public Xouw_db_mgr(Db_conn conn) { - tbl__wiki = new Xou_wiki_tbl(conn); +public class Xowdir_db_mgr { + public Xowdir_db_mgr(Db_conn conn) { + tbl__wiki = new Xowdir_wiki_tbl(conn); conn.Meta_tbl_assert(tbl__wiki); } - public Xou_wiki_tbl Tbl__wiki() {return tbl__wiki;} private final Xou_wiki_tbl tbl__wiki; + public Xowdir_wiki_tbl Tbl__wiki() {return tbl__wiki;} private final Xowdir_wiki_tbl tbl__wiki; } diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xou_wiki_itm.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_itm.java similarity index 53% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xou_wiki_itm.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_itm.java index 703931a55..b31bb3512 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xou_wiki_itm.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_itm.java @@ -15,18 +15,16 @@ 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 . */ -package gplx.xowa.addons.users.wikis.regys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; -public class Xou_wiki_itm { - public Xou_wiki_itm(int id, String domain, String name, Io_url url, String data) { +package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; +public class Xowdir_wiki_itm { + public Xowdir_wiki_itm(int id, String domain, Io_url url, Xowdir_wiki_json json) { this.id = id; this.domain = domain; - this.name = name; this.url = url; - this.data = data; + this.json = json; } - public int Id() {return id;} private int id; - public String Domain() {return domain;} private String domain; - public String Name() {return name;} private String name; - public Io_url Url() {return url;} private Io_url url; - public String Data() {return data;} private String data; + public int Id() {return id;} private final int id; + public String Domain() {return domain;} private final String domain; + public Io_url Url() {return url;} private final Io_url url; + public Xowdir_wiki_json Json() {return json;} private final Xowdir_wiki_json json; } diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json.java new file mode 100644 index 000000000..57346bfb5 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_json.java @@ -0,0 +1,48 @@ +/* +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 . +*/ +package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; +import gplx.langs.jsons.*; +public class Xowdir_wiki_json { + public Xowdir_wiki_json(String name, String mainpage) { + this.name = name; + this.mainpage = mainpage; + } + public String Name() {return name;} private String name; public void Name_(String v) {name = v;} + public String Mainpage() {return mainpage;} private String mainpage; public void Mainpage_(String v) {mainpage = v;} + public String To_str(Json_wtr wtr) { + wtr.Doc_nde_bgn(); + + wtr.Nde_bgn("core"); + wtr.Kv_str("name", name); + wtr.Kv_str("mainpage", mainpage); + wtr.Nde_end(); + + wtr.Doc_nde_end(); + return wtr.To_str_and_clear(); + } + + public static Xowdir_wiki_json New_by_json(Json_parser json_parser, String json) { + Json_doc jdoc = json_parser.Parse(json); + String name = jdoc.Get_val_as_str_or(Bry_.Ary("core", "name"), ""); + String mainpage = jdoc.Get_val_as_str_or(Bry_.Ary("core", "mainpage"), ""); + return new Xowdir_wiki_json(name, mainpage); + } + public static Xowdir_wiki_json New_dflt() { + return new Xowdir_wiki_json("", "Main_Page"); + } +} diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xou_wiki_tbl.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_tbl.java similarity index 59% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xou_wiki_tbl.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_tbl.java index 51da85aed..ae0314dfa 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xou_wiki_tbl.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/dbs/Xowdir_wiki_tbl.java @@ -15,53 +15,45 @@ 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 . */ -package gplx.xowa.addons.users.wikis.regys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; +package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.dbs.*; import gplx.dbs.utls.*; -public class Xou_wiki_tbl implements Db_tbl { +import gplx.langs.jsons.*; +public class Xowdir_wiki_tbl implements Db_tbl { private final Dbmeta_fld_list flds = new Dbmeta_fld_list(); - private final String fld__wiki_id, fld__wiki_domain, fld__wiki_name, fld__wiki_core_url, fld__wiki_data; + private final String fld__wiki_id, fld__wiki_domain, fld__wiki_core_url, fld__wiki_json; private final Db_conn conn; - public Xou_wiki_tbl(Db_conn conn) { + private final Json_parser json_parser = new Json_parser(); + public Xowdir_wiki_tbl(Db_conn conn) { this.conn = conn; this.tbl_name = Tbl_name_dflt; this.fld__wiki_id = flds.Add_int_pkey("wiki_id"); this.fld__wiki_domain = flds.Add_str("wiki_domain", 255); // EX: "en.wikipedia.org" - this.fld__wiki_name = flds.Add_str("wiki_name", 255); // EX: "English Wikipedia" this.fld__wiki_core_url = flds.Add_str("wiki_core_url", 255); // EX: "/xowa/wiki/en.wikipedia.org/en.wikipedia.org-core.xowa" - this.fld__wiki_data = flds.Add_text("wiki_data"); // EX: '{category_level="1",search_level="2", ...}' + this.fld__wiki_json = flds.Add_text("wiki_json"); // EX: '{category_level="1",search_level="2", ...}' conn.Rls_reg(this); } 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 boolean Upsert(int id, String domain, Io_url core_url, String json) { + return Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__wiki_id), id, domain, core_url.Xto_api(), json); } - public void Insert(int id, String domain, String name, String core_url, String data) { - conn.Stmt_insert(tbl_name, flds).Val_int(fld__wiki_id, id) - .Val_str(fld__wiki_domain, domain).Val_str(fld__wiki_name, name) - .Val_str(fld__wiki_core_url, core_url).Val_str(fld__wiki_data, data) - .Exec_insert() - ; - } - public boolean Upsert(int id, String domain, String name, Io_url core_url) { - return Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__wiki_id), id, domain, name, core_url.Xto_api(), ""); - } - public Xou_wiki_itm[] Select_all() { + public Xowdir_wiki_itm[] Select_all() { Db_rdr rdr = conn.Stmt_select(tbl_name, flds).Exec_select__rls_auto(); try { List_adp list = List_adp_.New(); while (rdr.Move_next()) { list.Add(Make(rdr)); } - return (Xou_wiki_itm[])list.To_ary_and_clear(Xou_wiki_itm.class); + return (Xowdir_wiki_itm[])list.To_ary_and_clear(Xowdir_wiki_itm.class); } finally {rdr.Rls();} } - public Xou_wiki_itm Select_by_key_or_null(String key) { + public Xowdir_wiki_itm Select_by_key_or_null(String key) { Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__wiki_domain).Crt_str(fld__wiki_domain, key).Exec_select__rls_auto(); try {return rdr.Move_next() ? Make(rdr) : null;} finally {rdr.Rls();} } - public Xou_wiki_itm Select_by_id_or_null(int id) { + public Xowdir_wiki_itm Select_by_id_or_null(int id) { Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__wiki_id).Crt_int(fld__wiki_id, id).Exec_select__rls_auto(); try {return rdr.Move_next() ? Make(rdr) : null;} finally {rdr.Rls();} @@ -69,10 +61,13 @@ public class Xou_wiki_tbl implements Db_tbl { public void Delete_by_id(int id) { conn.Stmt_delete(tbl_name, fld__wiki_id).Crt_int(fld__wiki_id, id).Exec_delete(); } - private Xou_wiki_itm Make(Db_rdr rdr) { - return new Xou_wiki_itm(rdr.Read_int(fld__wiki_id), rdr.Read_str(fld__wiki_domain), rdr.Read_str(fld__wiki_name), Io_url_.new_fil_(rdr.Read_str(fld__wiki_core_url)), rdr.Read_str(fld__wiki_data)); + private Xowdir_wiki_itm Make(Db_rdr rdr) { + return new Xowdir_wiki_itm + ( rdr.Read_int(fld__wiki_id), rdr.Read_str(fld__wiki_domain) + , Io_url_.new_fil_(rdr.Read_str(fld__wiki_core_url)) + , Xowdir_wiki_json.New_by_json(json_parser, rdr.Read_str(fld__wiki_json)) + ); } - public void Rls() {} public static final String Tbl_name_dflt = "user_wiki"; diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_bridge.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_bridge.java similarity index 72% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_bridge.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_bridge.java index c41d25e45..1e76a1d9b 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_bridge.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_bridge.java @@ -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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.itms; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; +package gplx.xowa.addons.wikis.directorys.specials.items; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.langs.jsons.*; -import gplx.xowa.addons.users.wikis.regys.dbs.*; +import gplx.xowa.addons.wikis.directorys.dbs.*; import gplx.xowa.htmls.bridges.*; -public class Xouw_itm_bridge implements Bridge_cmd_itm { - private Xouw_itm_mgr itm_mgr; +public class Xowdir_item_bridge implements Bridge_cmd_itm { + private Xowdir_item_mgr itm_mgr; public void Init_by_app(Xoa_app app) { - this.itm_mgr = new Xouw_itm_mgr(app); + this.itm_mgr = new Xowdir_item_mgr(app); } public String Exec(Json_nde data) { byte proc_id = proc_hash.Get_as_byte_or(data.Get_as_bry_or(Bridge_cmd_mgr.Msg__proc, null), Byte_ascii.Max_7_bit); @@ -41,6 +41,6 @@ public class Xouw_itm_bridge implements Bridge_cmd_itm { .Add_str_byte("delete" , Proc__delete) ; - public byte[] Key() {return BRIDGE_KEY;} public static final byte[] BRIDGE_KEY = Bry_.new_a7("user.wiki.itm.exec"); - public static final Xouw_itm_bridge Prototype = new Xouw_itm_bridge(); Xouw_itm_bridge() {} + public byte[] Key() {return BRIDGE_KEY;} public static final byte[] BRIDGE_KEY = Bry_.new_a7("wiki.directory.item"); + public static final Xowdir_item_bridge Prototype = new Xowdir_item_bridge(); Xowdir_item_bridge() {} } diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_doc.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_doc.java similarity index 61% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_doc.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_doc.java index c135bfd9e..35866dd22 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_doc.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_doc.java @@ -15,25 +15,26 @@ 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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.itms; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; -import gplx.core.ios.*; -import gplx.langs.mustaches.*; import gplx.xowa.addons.users.wikis.regys.dbs.*; -public class Xouw_itm_doc implements Mustache_doc_itm { +package gplx.xowa.addons.wikis.directorys.specials.items; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; +import gplx.langs.mustaches.*; import gplx.xowa.addons.wikis.directorys.dbs.*; +public class Xowdir_item_doc implements Mustache_doc_itm { private final boolean mode_is_new; private final int id; - private final String domain, name, dir; - public Xouw_itm_doc(int id, String domain, String name, String dir) { + private final String domain, name, dir, mainpage; + public Xowdir_item_doc(int id, String domain, String name, String dir, String mainpage) { this.mode_is_new = id == -1; this.id = id; this.domain = domain; this.name = name; this.dir = dir; + this.mainpage = mainpage; } public boolean Mustache__write(String key, Mustache_bfr bfr) { if (String_.Eq(key, "id")) bfr.Add_int(id); else if (String_.Eq(key, "domain")) bfr.Add_str_u8(domain); else if (String_.Eq(key, "name")) bfr.Add_str_u8(name); else if (String_.Eq(key, "dir")) bfr.Add_str_u8(dir); + else if (String_.Eq(key, "mainpage")) bfr.Add_str_u8(mainpage); else return false; return true; } @@ -42,11 +43,11 @@ public class Xouw_itm_doc implements Mustache_doc_itm { return Mustache_doc_itm_.Ary__empty; } - public static final Xouw_itm_doc[] Ary_empty = new Xouw_itm_doc[0]; - public static Xouw_itm_doc New(Xou_wiki_itm itm) {return new Xouw_itm_doc(itm.Id(), itm.Domain(), itm.Name(), itm.Url().OwnerDir().Xto_api());} - public static Xouw_itm_doc[] New_ary(Xou_wiki_itm[] itms_ary) { + public static final Xowdir_item_doc[] Ary_empty = new Xowdir_item_doc[0]; + public static Xowdir_item_doc New(Xowdir_wiki_itm itm) {return new Xowdir_item_doc(itm.Id(), itm.Domain(), itm.Json().Name(), itm.Url().OwnerDir().Xto_api(), itm.Json().Mainpage());} + public static Xowdir_item_doc[] New_ary(Xowdir_wiki_itm[] itms_ary) { int len = itms_ary.length; - Xouw_itm_doc[] rv = new Xouw_itm_doc[itms_ary.length]; + Xowdir_item_doc[] rv = new Xowdir_item_doc[itms_ary.length]; for (int i = 0; i < len; i++) { rv[i] = New(itms_ary[i]); } diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_html.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_html.java similarity index 64% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_html.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_html.java index c7d54de31..adcd43d47 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_html.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_html.java @@ -15,23 +15,23 @@ 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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.itms; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; +package gplx.xowa.addons.wikis.directorys.specials.items; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.specials.*; import gplx.langs.mustaches.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.tags.*; -import gplx.dbs.*; import gplx.xowa.addons.users.wikis.regys.dbs.*; -class Xouw_itm_html extends Xow_special_wtr__base { +import gplx.dbs.*; import gplx.xowa.addons.wikis.directorys.dbs.*; +class Xowdir_item_html extends Xow_special_wtr__base { private final String domain; - public Xouw_itm_html(String domain) { + public Xowdir_item_html(String domain) { this.domain = domain; } - @Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "user", "wiki", "itm");} - @Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xouw_itm.mustache.html");} + @Override protected Io_url Get_addon_dir(Xoa_app app) {return Addon_dir(app);} + @Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xowdir_item.mustache.html");} @Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) { Db_conn conn = app.User().User_db_mgr().Conn(); - Xouw_db_mgr db_mgr = new Xouw_db_mgr(conn); - Xou_wiki_itm itm = db_mgr.Tbl__wiki().Select_by_key_or_null(domain); + Xowdir_db_mgr db_mgr = new Xowdir_db_mgr(conn); + Xowdir_wiki_itm itm = db_mgr.Tbl__wiki().Select_by_key_or_null(domain); if (itm == null) - itm = new Xou_wiki_itm(-1, "", "", Io_url_.Empty, ""); - return Xouw_itm_doc.New(itm); + itm = new Xowdir_wiki_itm(-1, "", Io_url_.Empty, Xowdir_wiki_json.New_dflt()); + return Xowdir_item_doc.New(itm); } @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(); @@ -39,8 +39,12 @@ class Xouw_itm_html extends Xow_special_wtr__base { 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__xoajax (head_tags, app.Fsys_mgr().Http_root(), app); + Xopg_alertify_.Add_tags (head_tags, app.Fsys_mgr().Http_root()); - head_tags.Add(Xopg_tag_itm.New_css_file(addon_dir.GenSubFil_nest("bin", "xouw_itm.css"))); - head_tags.Add(Xopg_tag_itm.New_js_file(addon_dir.GenSubFil_nest("bin", "xouw_itm.js"))); + head_tags.Add(Xopg_tag_itm.New_css_file(addon_dir.GenSubFil_nest("bin", "xowdir_item.css"))); + head_tags.Add(Xopg_tag_itm.New_js_file(addon_dir.GenSubFil_nest("bin", "xowdir_item.js"))); + } + public static Io_url Addon_dir(Xoa_app app) { + return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "wiki", "directory", "item"); } } diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_mgr.java new file mode 100644 index 000000000..6d898be6e --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_mgr.java @@ -0,0 +1,148 @@ +/* +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 . +*/ +package gplx.xowa.addons.wikis.directorys.specials.items; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; +import gplx.langs.jsons.*; +import gplx.dbs.sys.*; import gplx.xowa.addons.wikis.directorys.dbs.*; import gplx.xowa.addons.wikis.directorys.specials.items.bldrs.*; +import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.data.*; +import gplx.xowa.langs.cases.*; +class Xowdir_item_mgr { + private final Xoa_app app; + private final Json_wtr json_wtr = new Json_wtr(); + private gplx.xowa.guis.cbks.Xog_cbk_trg cbk_trg = gplx.xowa.guis.cbks.Xog_cbk_trg.New(Xowdir_item_special.Prototype.Special__meta().Ttl_bry()); + public Xowdir_item_mgr(Xoa_app app) { + this.app = app; + } + public void Save(Json_nde args) {Save(args.Get_as_int("id"), args.Get_as_str("domain"), args.Get_as_str("name"), args.Get_as_str("dir"), args.Get_as_str("mainpage"));} + public void Save(int id, String domain, String name, String dir_str, String mainpage_name) { + boolean itm_is_new = false; + // get next id if none provided + if (id == -1) { + itm_is_new = true; + Db_sys_mgr sys_mgr = new Db_sys_mgr(app.User().User_db_mgr().Conn()); + id = sys_mgr.Autonum_next("user.wikis.id"); + } + + Xowdir_db_mgr db_mgr = new Xowdir_db_mgr(app.User().User_db_mgr().Conn()); + Io_url dir_url = Io_url_.new_dir_infer(dir_str); + + // validate + String err_msg = Validate(app, db_mgr, domain, name, dir_url, mainpage_name); + if (err_msg != null) { + app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.wiki_directory.notify__recv", gplx.core.gfobjs.Gfobj_nde.New().Add_str("msg_text", err_msg)); + return; + } + + // upsert into user_db.wiki_list + Io_url fil_url = dir_url.GenSubFil(domain + ".xowa"); + Xowdir_wiki_json json = Xowdir_wiki_json.New_dflt(); + json.Name_(name); + db_mgr.Tbl__wiki().Upsert(id, domain, fil_url, json.To_str(json_wtr)); + + if (itm_is_new) { + // create the actual wiki + byte[] mainpage_text = Io_mgr.Instance.LoadFilBryOr(Xowdir_item_html.Addon_dir(app).GenSubFil_nest("res", "page", "Main_Page.txt"), Bry_.Empty); + Xow_db_mkr.Create_wiki(new Xodb_wiki_data(domain, fil_url), Bry_.new_u8(mainpage_name), mainpage_text); + + // load it + Xow_wiki_factory.Load_personal((Xoae_app)app, Bry_.new_u8(domain), dir_url); + + // navigate to it + app.Gui__cbk_mgr().Send_redirect(cbk_trg, "/site/" + domain + "/wiki/" + mainpage_name); + } + else { + // navigate back to wiki_directory + app.Gui__cbk_mgr().Send_redirect(cbk_trg, "/site/home/wiki/Special:XowaWikiDirectory"); + } + } + public void Delete(Json_nde args) {Delete(args.Get_as_int("id"));} + public void Delete(int id) { + // get item by id + Xowdir_db_mgr db_mgr = new Xowdir_db_mgr(app.User().User_db_mgr().Conn()); + Xowdir_wiki_itm itm = db_mgr.Tbl__wiki().Select_by_id_or_null(id); + if (itm == null) throw Err_.new_wo_type("wiki does not exist", "id", id); + + // delete it + db_mgr.Tbl__wiki().Delete_by_id(id); + + // navigate back to wiki_directory + app.Gui__cbk_mgr().Send_redirect(cbk_trg, "/site/home/wiki/Special:XowaWikiDirectory"); + } + private String Validate(Xoa_app app, Xowdir_db_mgr db_mgr, String domain, String name, Io_url dir_url, String mainpage_name) { + // domain + if (String_.Len_eq_0(domain)) + return "Domain cannot be empty: " + domain; + if (db_mgr.Tbl__wiki().Select_by_key_or_null(domain) != null) + return "Domain already exists: " + domain; + if (String_.Len(domain) > 63) + return "Domain must be 63 characters or less: " + domain; + if (!Is_valid_domain_name(Bry_.new_u8(domain))) + return "Domain is invalid; can only have letters, numbers, or a dot. If a dash exists, it cannot be at the start or the end: " + domain ; + + // name + if (String_.Len_eq_0(name)) + return "Name cannot be empty: " + name; + if (String_.Len(name) > 255) + return "Name must: be 255 characters or less: " + name; + + // dir + String dir_str = dir_url.Raw(); + if (String_.Len_eq_0(dir_str)) + return "Folder cannot be empty: " + dir_str; + Io_mgr.Instance.CreateDirIfAbsent(dir_url); + if (!Io_mgr.Instance.ExistsDir(dir_url)) + return "Folder could not be created: " + dir_str; + + // mainpage_name + byte[] mainpage_name_bry = Bry_.new_u8(mainpage_name); + Xoa_ttl ttl = Xoa_ttl.Parse(app.User().Wikii(), mainpage_name_bry); + if (ttl == null) + return "Main Page has invalid characters. Please see the new wiki help page for more info: " + mainpage_name; + + Bry_bfr tmp = Bry_bfr_.New(); + byte[] ucase_1st = app.User().Wikii().Lang().Case_mgr().Case_build_1st_upper(tmp, mainpage_name_bry, 0, mainpage_name_bry.length); + if (!Bry_.Eq(mainpage_name_bry, ucase_1st)) + return "Main Page must start with an uppercase letter."; + + // valid returns null + return null; + } + private static boolean Is_valid_domain_name(byte[] src) { + int len = src.length; + if (len > 63) return false; + for (int i = 0; i < len; i++) { + byte b = src[i]; + // alpha-num is valid + if (Byte_ascii.Is_ltr(b) || Byte_ascii.Is_num(b)) + continue; + + // hyphens are only valid at start or end + if (b == Byte_ascii.Dash) { + if (i != 0 || i != len - 1) + continue; + } + + // allow dots; EX: en.wikipedia.org + if (b == Byte_ascii.Dot) + continue; + + // else, invalid + return false; + } + return true; + } +} diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_special.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_special.java similarity index 67% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_special.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_special.java index 53e37b329..72a91b982 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_special.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/Xowdir_item_special.java @@ -15,18 +15,18 @@ 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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.itms; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; +package gplx.xowa.addons.wikis.directorys.specials.items; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.specials.*; import gplx.core.net.qargs.*; -public class Xouw_itm_special implements Xow_special_page { +public class Xowdir_item_special implements Xow_special_page { public void Special__gen(Xow_wiki wiki, Xoa_page page, Xoa_url url, Xoa_ttl ttl) { Gfo_qarg_mgr url_args = new Gfo_qarg_mgr().Init(url.Qargs_ary()); String domain = url_args.Read_str_or("domain", ""); - new Xouw_itm_html(domain).Bld_page_by_mustache(wiki.App(), page, this); + new Xowdir_item_html(domain).Bld_page_by_mustache(wiki.App(), page, this); } - Xouw_itm_special(Xow_special_meta special__meta) {this.special__meta = special__meta;} + Xowdir_item_special(Xow_special_meta special__meta) {this.special__meta = special__meta;} public Xow_special_meta Special__meta() {return special__meta;} private final Xow_special_meta special__meta; public Xow_special_page Special__clone() {return this;} - public static final Xow_special_page Prototype = new Xouw_itm_special(Xow_special_meta.New_xo("XowaWikiItem", "Wiki Data")); + public static final Xow_special_page Prototype = new Xowdir_item_special(Xow_special_meta.New_xo("XowaWikiItem", "Wiki Details")); } diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_data.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xodb_wiki_data.java similarity index 80% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_data.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xodb_wiki_data.java index 6573f34dd..164b1bc0d 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_data.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xodb_wiki_data.java @@ -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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; +package gplx.xowa.addons.wikis.directorys.specials.items.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.addons.wikis.directorys.specials.items.*; import gplx.core.ios.streams.*; public class Xodb_wiki_data { public Xodb_wiki_data(String domain, Io_url core_url) { diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_db.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xodb_wiki_db.java similarity index 84% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_db.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xodb_wiki_db.java index fcbadf4f0..d849c24cb 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_db.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xodb_wiki_db.java @@ -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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; +package gplx.xowa.addons.wikis.directorys.specials.items.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.addons.wikis.directorys.specials.items.*; import gplx.dbs.*; public class Xodb_wiki_db implements Db_tbl_owner { private final Ordered_hash tbls = Ordered_hash_.New(); diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_db_tid.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xodb_wiki_db_tid.java similarity index 74% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_db_tid.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xodb_wiki_db_tid.java index ada0dc54d..c302de885 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_db_tid.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xodb_wiki_db_tid.java @@ -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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; +package gplx.xowa.addons.wikis.directorys.specials.items.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.addons.wikis.directorys.specials.items.*; public class Xodb_wiki_db_tid { public static final int Tid__core = 0; } diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xodb_wiki_mgr.java similarity index 79% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_mgr.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xodb_wiki_mgr.java index a0931295b..7bf97a5cc 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xodb_wiki_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xodb_wiki_mgr.java @@ -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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; +package gplx.xowa.addons.wikis.directorys.specials.items.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.addons.wikis.directorys.specials.items.*; import gplx.dbs.*; public class Xodb_wiki_mgr { public Xodb_wiki_mgr(String domain) { diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xopg_db_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xopg_db_mgr.java similarity index 81% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xopg_db_mgr.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xopg_db_mgr.java index 5c16a01c4..ad47f91d3 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xopg_db_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xopg_db_mgr.java @@ -15,11 +15,11 @@ 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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; +package gplx.xowa.addons.wikis.directorys.specials.items.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.addons.wikis.directorys.specials.items.*; import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.wikis.dbs.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; -import gplx.xowa.addons.users.wikis.regys.dbs.*; -import gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs.*; +import gplx.xowa.addons.wikis.directorys.dbs.*; +import gplx.xowa.addons.wikis.directorys.specials.items.bldrs.*; public class Xopg_db_mgr { public static int Create(Xodb_wiki_db core_db, int ns_id, byte[] ttl_page_db, byte[] text_raw) { Db_cfg_tbl cfg_tbl = Db_cfg_tbl.Get_by_key(core_db, Xowd_cfg_tbl_.Tbl_name); diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xow_db_mkr.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_db_mkr.java similarity index 84% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xow_db_mkr.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_db_mkr.java index f4f02685f..d28f55497 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/bldrs/Xow_db_mkr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_db_mkr.java @@ -15,15 +15,15 @@ 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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.itms.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; +package gplx.xowa.addons.wikis.directorys.specials.items.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.addons.wikis.directorys.specials.items.*; import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.dbs.sys.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*; import gplx.core.ios.streams.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.data.site_stats.*; import gplx.xowa.langs.cases.*; import gplx.fsdb.*; import gplx.fsdb.meta.*; import gplx.fsdb.data.*; import gplx.xowa.files.origs.*; -import gplx.xowa.addons.users.wikis.regys.dbs.*; +import gplx.xowa.addons.wikis.directorys.dbs.*; public class Xow_db_mkr { - public static Xodb_wiki_mgr Create_wiki(Xodb_wiki_data data) { + public static Xodb_wiki_mgr Create_wiki(Xodb_wiki_data data, byte[] mainpage_name, byte[] mainpage_text) { // create db Xodb_wiki_mgr wiki_mgr = new Xodb_wiki_mgr(data.Domain()); wiki_mgr.Dbs__add(Xodb_wiki_db.Make(Xodb_wiki_db_tid.Tid__core, data.Core_url())); @@ -58,8 +58,8 @@ public class Xow_db_mkr { cfg_tbl.Insert_str(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__modified_latest, Datetime_now.Get().XtoStr_fmt(DateAdp_.Fmt_iso8561_date_time)); // insert data: page - cfg_tbl.Insert_str(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__main_page, "Main_Page"); - Xopg_db_mgr.Create(core_db, Xow_ns_.Tid__main, Bry_.new_a7("Main_Page"), Bry_.new_a7("Main page created")); + cfg_tbl.Insert_bry(Xow_cfg_consts.Grp__wiki_init, Xow_cfg_consts.Key__init__main_page, mainpage_name); + Xopg_db_mgr.Create(core_db, Xow_ns_.Tid__main, mainpage_name, mainpage_text); // create tbls: fsdb core_db.Tbls__add(Bool_.Y diff --git a/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_wiki_factory.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_wiki_factory.java new file mode 100644 index 000000000..042c8c459 --- /dev/null +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/items/bldrs/Xow_wiki_factory.java @@ -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 . +*/ +package gplx.xowa.addons.wikis.directorys.specials.items.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.addons.wikis.directorys.specials.items.*; +public class Xow_wiki_factory { + public static Xowe_wiki Load_personal(Xoae_app app, byte[] domain, Io_url dir_url) { + // create the rv + Xowe_wiki rv = new Xowe_wiki + ( app + , gplx.xowa.langs.Xol_lang_itm_.Lang_en_make(app.Lang_mgr()) + , gplx.xowa.wikis.nss.Xow_ns_mgr_.default_(gplx.xowa.langs.cases.Xol_case_mgr_.U8()) + , gplx.xowa.wikis.domains.Xow_domain_itm_.parse(domain) + , dir_url); + + // register it in app.Wikis; note that this must occur before initialization + app.Wiki_mgr().Add(rv); + + // do more initialization + rv.Init_by_wiki__force_and_mark_inited(); + rv.Db_mgr_as_sql().Save_mgr().Create_enabled_(true); + + // register it for the url-bar; EX: test.me.org/wiki/Main_Page + app.User().Wikii().Xwiki_mgr().Add_by_atrs(domain, domain); + + // add an xwiki to xowa.home + rv.Xwiki_mgr().Add_by_atrs("xowa.home", "home"); + + // HACK: remove CC copyright message; should change to option + rv.Msg_mgr().Get_or_make(Bry_.new_a7("wikimedia-copyright")).Atrs_set(Bry_.Empty, false, false); + + return rv; + } +} diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/lists/Xouw_list_doc.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_doc.java similarity index 63% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/lists/Xouw_list_doc.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_doc.java index a38d433aa..4beb6b6db 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/lists/Xouw_list_doc.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_doc.java @@ -15,13 +15,12 @@ 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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.lists; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; -import gplx.core.ios.*; +package gplx.xowa.addons.wikis.directorys.specials.lists; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.langs.mustaches.*; -import gplx.xowa.addons.users.wikis.regys.dbs.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; -class Xouw_list_doc implements Mustache_doc_itm { - private final Xouw_itm_doc[] itms_ary; - public Xouw_list_doc(Xouw_itm_doc[] itms_ary) { +import gplx.xowa.addons.wikis.directorys.specials.items.*; +class Xowdir_list_doc implements Mustache_doc_itm { + private final Xowdir_item_doc[] itms_ary; + public Xowdir_list_doc(Xowdir_item_doc[] itms_ary) { this.itms_ary = itms_ary; } public boolean Mustache__write(String key, Mustache_bfr bfr) { diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/lists/Xouw_list_html.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_html.java similarity index 67% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/lists/Xouw_list_html.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_html.java index e61250dba..97ce5aeac 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/lists/Xouw_list_html.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_html.java @@ -15,17 +15,17 @@ 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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.lists; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; +package gplx.xowa.addons.wikis.directorys.specials.lists; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.specials.*; import gplx.langs.mustaches.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.tags.*; -import gplx.dbs.*; import gplx.xowa.addons.users.wikis.regys.dbs.*; import gplx.xowa.addons.users.wikis.regys.specials.itms.*; -class Xouw_list_html extends Xow_special_wtr__base { - @Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "user", "wiki", "list");} - @Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xouw_list.mustache.html");} +import gplx.dbs.*; import gplx.xowa.addons.wikis.directorys.dbs.*; import gplx.xowa.addons.wikis.directorys.specials.items.*; +class Xowdir_list_html extends Xow_special_wtr__base { + @Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "wiki", "directory", "list");} + @Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xowdir_list.mustache.html");} @Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) { Db_conn conn = app.User().User_db_mgr().Conn(); - Xouw_db_mgr db_mgr = new Xouw_db_mgr(conn); - Xou_wiki_itm[] itms_ary = db_mgr.Tbl__wiki().Select_all(); - return new Xouw_list_doc(Xouw_itm_doc.New_ary(itms_ary)); + Xowdir_db_mgr db_mgr = new Xowdir_db_mgr(conn); + Xowdir_wiki_itm[] itms_ary = db_mgr.Tbl__wiki().Select_all(); + return new Xowdir_list_doc(Xowdir_item_doc.New_ary(itms_ary)); } @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(); @@ -34,7 +34,7 @@ class Xouw_list_html extends Xow_special_wtr__base { Xopg_tag_wtr_.Add__xolog (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_css_file(addon_dir.GenSubFil_nest("bin", "xouw_list.css"))); - head_tags.Add(Xopg_tag_itm.New_js_file(addon_dir.GenSubFil_nest("bin", "xouw_list.js"))); + head_tags.Add(Xopg_tag_itm.New_css_file(addon_dir.GenSubFil_nest("bin", "xowdir_list.css"))); + head_tags.Add(Xopg_tag_itm.New_js_file(addon_dir.GenSubFil_nest("bin", "xowdir_list.js"))); } } diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/lists/Xouw_list_special.java b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_special.java similarity index 61% rename from 400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/lists/Xouw_list_special.java rename to 400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_special.java index 54d1dd631..eeb122889 100644 --- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/lists/Xouw_list_special.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/directorys/specials/lists/Xowdir_list_special.java @@ -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 . */ -package gplx.xowa.addons.users.wikis.regys.specials.lists; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*; +package gplx.xowa.addons.wikis.directorys.specials.lists; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*; import gplx.xowa.addons.wikis.directorys.specials.*; import gplx.xowa.specials.*; import gplx.core.net.qargs.*; -public class Xouw_list_special implements Xow_special_page { +public class Xowdir_list_special implements Xow_special_page { public void Special__gen(Xow_wiki wiki, Xoa_page page, Xoa_url url, Xoa_ttl ttl) { - new Xouw_list_html().Bld_page_by_mustache(wiki.App(), page, this); + new Xowdir_list_html().Bld_page_by_mustache(wiki.App(), page, this); } - Xouw_list_special(Xow_special_meta special__meta) {this.special__meta = special__meta;} + Xowdir_list_special(Xow_special_meta special__meta) {this.special__meta = special__meta;} public Xow_special_meta Special__meta() {return special__meta;} private final Xow_special_meta special__meta; public Xow_special_page Special__clone() {return this;} - public static final Xow_special_page Prototype = new Xouw_list_special(Xow_special_meta.New_xo("XowaUserWikis", "Wikis")); + public static final Xow_special_page Prototype = new Xowdir_list_special(Xow_special_meta.New_xo("XowaWikiDirectory", "Wiki List")); } diff --git a/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java b/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java index 4795d5190..7c96328fd 100644 --- a/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java +++ b/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java @@ -75,7 +75,7 @@ public class Xow_file_mgr implements Gfo_invk { // if non-wmf, set fsdb_mgr to fs.dir; DATE:2017-02-01 if (wiki.Domain_tid() == gplx.xowa.wikis.domains.Xow_domain_tid_.Tid__other) { - String cfg_domain_str = wiki.Data__core_mgr().Db__core().Tbl__cfg().Select_str("xowa.bldr.session", "wiki_domain"); + String cfg_domain_str = wiki.Data__core_mgr().Db__core().Tbl__cfg().Select_str_or("xowa.bldr.session", "wiki_domain", wiki.Domain_str()); // NOTE: or is "wiki.domain" for user_wikis // FOLDER.RENAME: do not change to fs.dir if renamed; DATE:2017-02-06 if (String_.Eq(cfg_domain_str, wiki.Domain_str())) { // wiki has not been renamed; use fs.dir diff --git a/400_xowa/src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java b/400_xowa/src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java index 543f7fe9e..0ef865bc2 100644 --- a/400_xowa/src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java +++ b/400_xowa/src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java @@ -61,6 +61,8 @@ public class Xog_bnd_mgr implements Gfo_invk { , "xowa.gui.shortcuts.xowa.nav.system_data.cfg_app-1" , "xowa.gui.shortcuts.xowa.nav.system_data.cfg_lang-1" , "xowa.gui.shortcuts.xowa.nav.system_data.usr_history-1" + , "xowa.gui.shortcuts.xowa.nav.personal.item-1" + , "xowa.gui.shortcuts.xowa.nav.personal.list-1" , "xowa.gui.shortcuts.xowa.gui.font.increase-1" , "xowa.gui.shortcuts.xowa.gui.font.decrease-1" , "xowa.gui.shortcuts.xowa.gui.font.reset-1" @@ -238,6 +240,8 @@ public class Xog_bnd_mgr implements Gfo_invk { Init_itm(Xog_cmd_itm_.Key_nav_setup_import_from_script , Xog_bnd_box_.Tid_browser , ""); Init_itm(Xog_cmd_itm_.Key_nav_setup_maintenance , Xog_bnd_box_.Tid_browser , ""); Init_itm(Xog_cmd_itm_.Key_nav_setup_download , Xog_bnd_box_.Tid_browser , ""); + Init_itm(Xog_cmd_itm_.Key_nav_personal_item , Xog_bnd_box_.Tid_browser , ""); + Init_itm(Xog_cmd_itm_.Key_nav_personal_list , Xog_bnd_box_.Tid_browser , ""); Init_itm(Xog_cmd_itm_.Key_nav_system_data_log_session , Xog_bnd_box_.Tid_browser , ""); Init_itm(Xog_cmd_itm_.Key_nav_system_data_cfg_app , Xog_bnd_box_.Tid_browser , ""); Init_itm(Xog_cmd_itm_.Key_nav_system_data_cfg_lang , Xog_bnd_box_.Tid_browser , ""); diff --git a/400_xowa/src/gplx/xowa/guis/cbks/Xog_cbk_mgr.java b/400_xowa/src/gplx/xowa/guis/cbks/Xog_cbk_mgr.java index b57fe7b29..e82b80d92 100644 --- a/400_xowa/src/gplx/xowa/guis/cbks/Xog_cbk_mgr.java +++ b/400_xowa/src/gplx/xowa/guis/cbks/Xog_cbk_mgr.java @@ -29,4 +29,7 @@ public class Xog_cbk_mgr { // INSTANCE:app wkr.Send_json(trg, func, data); } } + public void Send_redirect(Xog_cbk_trg trg, String url) { + this.Send_json(trg, "xo.server.redirect__recv", gplx.core.gfobjs.Gfobj_nde.New().Add_str("url", url)); + } } diff --git a/400_xowa/src/gplx/xowa/guis/cmds/Xog_cmd_itm_.java b/400_xowa/src/gplx/xowa/guis/cmds/Xog_cmd_itm_.java index 573ed1e2a..b679b2fec 100644 --- a/400_xowa/src/gplx/xowa/guis/cmds/Xog_cmd_itm_.java +++ b/400_xowa/src/gplx/xowa/guis/cmds/Xog_cmd_itm_.java @@ -50,6 +50,9 @@ public class Xog_cmd_itm_ { , Key_nav_system_data_cfg_lang = new_page_(Xog_ctg_itm_.Tid_nav_pages , "xowa.nav.system_data.cfg_lang" , "Special:XowaSystemData?type=cfg_lang") , Key_nav_system_data_usr_history = new_page_(Xog_ctg_itm_.Tid_nav_pages , "xowa.nav.system_data.usr_history" , "Special:XowaSystemData?type=usr_history") + , Key_nav_personal_item = new_page_(Xog_ctg_itm_.Tid_nav_pages , "xowa.nav.personal.item" , "Special:XowaWikiItem") + , Key_nav_personal_list = new_page_(Xog_ctg_itm_.Tid_nav_pages , "xowa.nav.personal.list" , "Special:XowaWikiDirectory") + , Key_gui_font_increase = new_dflt_(Xog_ctg_itm_.Tid_font , "xowa.gui.font.increase") , Key_gui_font_decrease = new_dflt_(Xog_ctg_itm_.Tid_font , "xowa.gui.font.decrease") , Key_gui_font_reset = new_dflt_(Xog_ctg_itm_.Tid_font , "xowa.gui.font.reset") diff --git a/400_xowa/src/gplx/xowa/xtns/math/texvcs/lxrs/Texvc_lxr__curly.java b/400_xowa/src/gplx/xowa/xtns/math/texvcs/lxrs/Texvc_lxr__curly_bgn.java similarity index 75% rename from 400_xowa/src/gplx/xowa/xtns/math/texvcs/lxrs/Texvc_lxr__curly.java rename to 400_xowa/src/gplx/xowa/xtns/math/texvcs/lxrs/Texvc_lxr__curly_bgn.java index ef068b758..0f781c084 100644 --- a/400_xowa/src/gplx/xowa/xtns/math/texvcs/lxrs/Texvc_lxr__curly.java +++ b/400_xowa/src/gplx/xowa/xtns/math/texvcs/lxrs/Texvc_lxr__curly_bgn.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.xtns.math.texvcs.lxrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.math.*; import gplx.xowa.xtns.math.texvcs.*; import gplx.xowa.xtns.math.texvcs.tkns.*; import gplx.xowa.xtns.math.texvcs.funcs.*; -class Texvc_lxr__curly_bgn implements Texvc_lxr { +public class Texvc_lxr__curly_bgn implements Texvc_lxr { public int Tid() {return Texvc_lxr_.Tid__curly_bgn;} public int Make_tkn(Texvc_ctx ctx, Texvc_root root, byte[] src, int src_len, int bgn_pos, int cur_pos) { int uid = root.Regy__add(Texvc_tkn_.Tid__curly, Texvc_tkn_mkr.Singleton_id__null, bgn_pos, cur_pos, new Texvc_tkn__func(Texvc_func_itm_.Itm__arg)); @@ -25,12 +25,3 @@ class Texvc_lxr__curly_bgn implements Texvc_lxr { return cur_pos; } } -class Texvc_lxr__curly_end implements Texvc_lxr { - public int Tid() {return Texvc_lxr_.Tid__curly_end;} - public int Make_tkn(Texvc_ctx ctx, Texvc_root root, byte[] src, int src_len, int bgn_pos, int cur_pos) { - int bgn_uid = ctx.Stack().Pop_or_fail(); - root.Regy__take_from_root_end(bgn_uid); - root.Regy__update_end(bgn_uid, cur_pos); - return cur_pos; - } -} diff --git a/400_xowa/src/gplx/xowa/xtns/math/texvcs/lxrs/Texvc_lxr__curly_end.java b/400_xowa/src/gplx/xowa/xtns/math/texvcs/lxrs/Texvc_lxr__curly_end.java new file mode 100644 index 000000000..a7d5251c1 --- /dev/null +++ b/400_xowa/src/gplx/xowa/xtns/math/texvcs/lxrs/Texvc_lxr__curly_end.java @@ -0,0 +1,28 @@ +/* +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 . +*/ +package gplx.xowa.xtns.math.texvcs.lxrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.math.*; import gplx.xowa.xtns.math.texvcs.*; +import gplx.xowa.xtns.math.texvcs.tkns.*; +public class Texvc_lxr__curly_end implements Texvc_lxr { + public int Tid() {return Texvc_lxr_.Tid__curly_end;} + public int Make_tkn(Texvc_ctx ctx, Texvc_root root, byte[] src, int src_len, int bgn_pos, int cur_pos) { + int bgn_uid = ctx.Stack().Pop_or_fail(); + root.Regy__take_from_root_end(bgn_uid); + root.Regy__update_end(bgn_uid, cur_pos); + return cur_pos; + } +}