diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java
index 5375d304f..6cf091593 100644
--- a/400_xowa/src/gplx/xowa/Xoa_app_.java
+++ b/400_xowa/src/gplx/xowa/Xoa_app_.java
@@ -34,7 +34,7 @@ public class Xoa_app_ {
}
}
public static final String Name = "xowa";
- public static final String Version = "3.6.3.1";
+ public static final String Version = "3.6.3.2";
public static String Build_date = "2012-12-30 00:00:00";
public static String Op_sys_str;
public static String User_agent = "";
diff --git a/400_xowa/src/gplx/xowa/Xoa_page.java b/400_xowa/src/gplx/xowa/Xoa_page.java
index d2fb0437b..9ea62ded9 100644
--- a/400_xowa/src/gplx/xowa/Xoa_page.java
+++ b/400_xowa/src/gplx/xowa/Xoa_page.java
@@ -16,15 +16,15 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa; import gplx.*;
-import gplx.xowa.wikis.pages.*;
+import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.lnkis.*;
public interface Xoa_page {
Xow_wiki Wiki();
- Xoa_url Url();
- byte[] Url_bry_safe();
+ Xoa_url Url(); byte[] Url_bry_safe();
Xoa_ttl Ttl();
boolean Exists();
Xopg_revision_data Revision_data();
Xopg_html_data Html_data();
+ Xopg_lnki_list Redlink_list();
byte[] Redirect_to_ttl(); void Redirect_to_ttl_(byte[] v);
Xoa_page__commons_mgr Commons_mgr();
diff --git a/400_xowa/src/gplx/xowa/Xoae_page.java b/400_xowa/src/gplx/xowa/Xoae_page.java
index 9973d478b..757ad005e 100644
--- a/400_xowa/src/gplx/xowa/Xoae_page.java
+++ b/400_xowa/src/gplx/xowa/Xoae_page.java
@@ -19,14 +19,14 @@ package gplx.xowa; import gplx.*;
import gplx.xowa.langs.*; import gplx.xowa.wikis.pages.*;
import gplx.xowa.guis.*; import gplx.xowa.guis.views.*;
import gplx.xowa.files.*; import gplx.xowa.files.xfers.*;
-import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.xtns.cites.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.xtns.wdatas.pfuncs.*;
+import gplx.xowa.parsers.*; import gplx.xowa.wikis.pages.lnkis.*; import gplx.xowa.xtns.cites.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.xtns.wdatas.pfuncs.*;
import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.htmls.*; import gplx.xowa.htmls.tocs.*; import gplx.xowa.htmls.modules.popups.*;
public class Xoae_page implements Xoa_page {
Xoae_page(Xowe_wiki wiki, Xoa_ttl ttl) {
this.wiki = wiki; this.ttl = ttl;
this.lang = wiki.Lang(); // default to wiki.lang; can be override later by wikitext
hdr_mgr = new Xow_hdr_mgr(this);
- redlink_lnki_list = new Xopg_redlink_lnki_list(ttl.Ns().Id_is_module());
+ redlink_list = new Xopg_lnki_list(ttl.Ns().Id_is_module());
Ttl_(ttl);
} Xoae_page() {} // called by Empty
public Xow_wiki Wiki() {return wiki;}
@@ -38,10 +38,10 @@ public class Xoae_page implements Xoa_page {
public Xopg_revision_data Revision_data() {return revision_data;} private Xopg_revision_data revision_data = new Xopg_revision_data();
public Xopg_html_data Html_data() {return html_data;} private Xopg_html_data html_data = new Xopg_html_data();
public byte[] Redirect_to_ttl() {return redirect_to_ttl;} private byte[] redirect_to_ttl; public void Redirect_to_ttl_(byte[] v) {this.redirect_to_ttl = v;}
+ public Xopg_lnki_list Redlink_list() {return redlink_list;} private Xopg_lnki_list redlink_list;
public Xoa_page__commons_mgr Commons_mgr() {return commons_mgr;} private final Xoa_page__commons_mgr commons_mgr = new Xoa_page__commons_mgr();
public Xowe_wiki Wikie() {return wiki;} private Xowe_wiki wiki;
- public Xopg_redlink_lnki_list Redlink_lnki_list() {return redlink_lnki_list;} private Xopg_redlink_lnki_list redlink_lnki_list;
public Xol_lang_itm Lang() {return lang;} public Xoae_page Lang_(Xol_lang_itm v) {lang = v; return this;} private Xol_lang_itm lang;
public Xopg_tab_data Tab_data() {return tab_data;} private final Xopg_tab_data tab_data = new Xopg_tab_data();
public Xopg_hdump_data Hdump_data() {return hdump_data;} private final Xopg_hdump_data hdump_data = new Xopg_hdump_data();
diff --git a/400_xowa/src/gplx/xowa/Xop_fxt.java b/400_xowa/src/gplx/xowa/Xop_fxt.java
index b3732d5ce..915b882c0 100644
--- a/400_xowa/src/gplx/xowa/Xop_fxt.java
+++ b/400_xowa/src/gplx/xowa/Xop_fxt.java
@@ -438,7 +438,7 @@ public class Xop_fxt {
Xoh_wtr_ctx hctx = Xoh_wtr_ctx.Hdump;
Xoh_html_wtr html_wtr = wiki.Html_mgr().Html_wtr();
html_wtr.Cfg().Toc__show_(Bool_.Y); // needed for hdr to show
- ctx.Page().Redlink_lnki_list().Clear();
+ ctx.Page().Redlink_list().Clear();
html_wtr.Write_all(tmp_bfr, ctx, hctx, src_bry, root);
// Tfds.Dbg(tmp_bfr.To_str());
return tmp_bfr.To_str_and_clear();
diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/centrals/cmds/Xobc_cmd__base.java b/400_xowa/src/gplx/xowa/addons/bldrs/centrals/cmds/Xobc_cmd__base.java
index 6f5c57acc..2e7d068a4 100644
--- a/400_xowa/src/gplx/xowa/addons/bldrs/centrals/cmds/Xobc_cmd__base.java
+++ b/400_xowa/src/gplx/xowa/addons/bldrs/centrals/cmds/Xobc_cmd__base.java
@@ -83,7 +83,7 @@ public abstract class Xobc_cmd__base implements Xobc_cmd_itm {
long data_cur = this.Load_checkpoint_hook();
this.Prog_data_cur_(data_cur);
if (data_cur > 0)
- this.Prog_status_(Gfo_prog_ui_.Status__working); // set status to working, else js won't warn about accidental removal
+ this.Prog_status_(Gfo_prog_ui_.Status__suspended); // set status to suspended, else js won't warn about accidental removal
}
@gplx.Virtual protected long Load_checkpoint_hook() {return 0;}
@@ -101,7 +101,7 @@ public abstract class Xobc_cmd__base implements Xobc_cmd_itm {
rate_cur = rate_now; // update it now
else {
double rate_new = ((rate_now - rate_cur) * .05) + rate_cur; // calc new rate as 5% of difference
- Tfds.Dbg(delta, rate_now, rate_cur, rate_new);
+ // Tfds.Dbg(delta, rate_now, rate_cur, rate_new);
rate_cur = rate_new;
}
}
diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/centrals/steps/Xobc_step_factory.java b/400_xowa/src/gplx/xowa/addons/bldrs/centrals/steps/Xobc_step_factory.java
index 4f8f98f67..873ff48bb 100644
--- a/400_xowa/src/gplx/xowa/addons/bldrs/centrals/steps/Xobc_step_factory.java
+++ b/400_xowa/src/gplx/xowa/addons/bldrs/centrals/steps/Xobc_step_factory.java
@@ -47,7 +47,7 @@ public class Xobc_step_factory {
step.Step_name_(String_.Format("{0} ·({1}/{2})", step_name.Val(), step_seqn + List_adp_.Base1, task.Step_count()));
task.Step_(step);
step.Cmd().Load_checkpoint();
- if (step.Cmd().Prog_status() == gplx.core.progs.Gfo_prog_ui_.Status__working)
+ if (step.Cmd().Prog_status() == gplx.core.progs.Gfo_prog_ui_.Status__suspended)
task.Task_status_(step.Cmd().Prog_status());
}
private Xobc_cmd_itm[] Make_wiki_import_cmds(Xobc_import_step_itm import_itm, int task_id, int step_id, String_obj_ref step_name, int step_seqn) {
diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/files/cmds/Xobldr__lnki_temp__create.java b/400_xowa/src/gplx/xowa/addons/bldrs/files/cmds/Xobldr__lnki_temp__create.java
index 63ec07ff3..5e6251126 100644
--- a/400_xowa/src/gplx/xowa/addons/bldrs/files/cmds/Xobldr__lnki_temp__create.java
+++ b/400_xowa/src/gplx/xowa/addons/bldrs/files/cmds/Xobldr__lnki_temp__create.java
@@ -97,7 +97,7 @@ public class Xobldr__lnki_temp__create extends Xob_dump_mgr_base implements gplx
page.Clear_all();
page.Bldr__ns_ord_(ns_ord);
page.Ttl_(ttl).Revision_data().Id_(db_page.Id());
- page.Redlink_lnki_list().Clear();
+ page.Redlink_list().Clear();
page.Url_(Xoa_url.new_(wiki.Domain_bry(), ttl.Full_db()));
if (ns.Id_is_tmpl())
parser.Parse_text_to_defn_obj(ctx, ctx.Tkn_mkr(), wiki.Ns_mgr().Ns_template(), ttl_bry, page_src);
diff --git a/400_xowa/src/gplx/xowa/files/Xog_redlink_thread.java b/400_xowa/src/gplx/xowa/files/Xog_redlink_thread.java
index bbcb0b359..afbdeffcb 100644
--- a/400_xowa/src/gplx/xowa/files/Xog_redlink_thread.java
+++ b/400_xowa/src/gplx/xowa/files/Xog_redlink_thread.java
@@ -25,7 +25,7 @@ public class Xog_redlink_thread implements Gfo_thread_wkr {
public void Thread__exec() {
int len = redlink_ary.length;
for (int i = 0; i < len; ++i) {
- js_wkr.Html_redlink(gplx.xowa.parsers.lnkis.redlinks.Xopg_redlink_lnki_list.Lnki_id_prefix + Int_.To_str(redlink_ary[i]));
+ js_wkr.Html_redlink(gplx.xowa.wikis.pages.lnkis.Xopg_lnki_list.Lnki_id_prefix + Int_.To_str(redlink_ary[i]));
}
}
}
diff --git a/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java b/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java
index 4113b47e0..47833db23 100644
--- a/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java
+++ b/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java
@@ -23,7 +23,7 @@ public class Js_img_mgr {
public static void Update_img(Xoa_page page, Xog_js_wkr js_wkr, Xof_file_itm itm) {
Js_img_mgr.Update_img(page, js_wkr, itm.Html_img_wkr(), itm.Html_uid(), itm.Lnki_type(), itm.Html_elem_tid(), itm.Html_w(), itm.Html_h(), itm.Html_view_url(), itm.Orig_w(), itm.Orig_h(), itm.Html_orig_url(), itm.Orig_ttl(), itm.Html_gallery_mgr_h());
}
- public static void Update_link_missing(Xog_html_itm html_itm, String html_id) {
+ public static void Update_link_missing(Xog_js_wkr html_itm, String html_id) {
html_itm.Html_redlink(html_id);
}
private static void Update_img(Xoa_page page, Xog_js_wkr js_wkr, Js_img_wkr img_wkr, int uid, byte lnki_type, byte elem_tid, int html_w, int html_h, Io_url html_view_url, int orig_w, int orig_h, Io_url html_orig_url, byte[] lnki_ttl, int gallery_mgr_h) {
diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_async_wkr.java b/400_xowa/src/gplx/xowa/guis/views/Xog_async_wkr.java
index 51fc4e1b8..8c4356a77 100644
--- a/400_xowa/src/gplx/xowa/guis/views/Xog_async_wkr.java
+++ b/400_xowa/src/gplx/xowa/guis/views/Xog_async_wkr.java
@@ -17,9 +17,10 @@ along with this program. If not, see .
*/
package gplx.xowa.guis.views; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*;
import gplx.core.threads.*;
-import gplx.xowa.parsers.lnkis.redlinks.*;
+import gplx.xowa.wikis.pages.lnkis.*;
import gplx.xowa.files.gui.*;
public class Xog_async_wkr {
+ public static void Async(Xog_tab_itm tab) {Xog_async_wkr.Async(tab.Page(), tab.Html_itm());}
public static void Async(Xoae_page page, Xog_html_itm js_wkr) {
if (page == null) return; // TEST: occurs during Xog_win_mgr_tst
@@ -94,8 +95,8 @@ public class Xog_async_wkr {
private static void Async_redlinks(Gfo_usr_dlg usr_dlg, Xoae_app app, Xoae_page page, Xog_js_wkr js_wkr) {
if (page.Tab_data().Tab() == null) return; // needed b/c Preview has page.Tab of null which causes null_ref error in redlinks
try {
- Xog_redlink_mgr redlinks_wkr = new Xog_redlink_mgr(page);
- Thread_adp_.Start_by_key(gplx.xowa.apps.Xoa_thread_.Key_page_redlink, redlinks_wkr, gplx.xowa.parsers.lnkis.redlinks.Xog_redlink_mgr.Invk_run);
+ Xopg_redlink_mgr redlinks_wkr = new Xopg_redlink_mgr(page, js_wkr);
+ Thread_adp_.Start_by_key(gplx.xowa.apps.Xoa_thread_.Key_page_redlink, redlinks_wkr, gplx.xowa.wikis.pages.lnkis.Xopg_redlink_mgr.Invk_run);
} catch (Exception e) {usr_dlg.Warn_many("", "", "page.thread.redlinks: page=~{0} err=~{1}", page.Ttl().Raw(), Err_.Message_gplx_full(e));}
}
}
diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java b/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java
index 246218175..ec24be333 100644
--- a/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java
+++ b/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java
@@ -21,7 +21,7 @@ import gplx.gfui.*; import gplx.gfui.ipts.*; import gplx.gfui.kits.core.*; impor
import gplx.xowa.guis.history.*; import gplx.xowa.guis.bnds.*;
import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*;
import gplx.xowa.langs.vnts.*;
-import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.apps.cfgs.old.*;
+import gplx.xowa.parsers.*; import gplx.xowa.wikis.pages.lnkis.*; import gplx.xowa.apps.cfgs.old.*;
import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.skins.*;
public class Xog_tab_itm implements Gfo_invk {
private Xog_win_itm win; private Xocfg_tab_mgr cfg_tab_mgr;
@@ -262,8 +262,8 @@ public class Xog_tab_itm implements Gfo_invk {
}
try {
if (page.Tab_data().Tab() != null) { // needed b/c Preview has page.Tab of null which causes null_ref error in redlinks
- Xog_redlink_mgr redlinks_wkr = new Xog_redlink_mgr(page);
- Thread_adp_.Start_by_key(gplx.xowa.apps.Xoa_thread_.Key_page_redlink, redlinks_wkr, gplx.xowa.parsers.lnkis.redlinks.Xog_redlink_mgr.Invk_run);
+ Xopg_redlink_mgr redlinks_wkr = new Xopg_redlink_mgr(page, html_itm);
+ Thread_adp_.Start_by_key(gplx.xowa.apps.Xoa_thread_.Key_page_redlink, redlinks_wkr, gplx.xowa.wikis.pages.lnkis.Xopg_redlink_mgr.Invk_run);
usr_dlg.Prog_none("", "imgs.done", "");
}
} catch (Exception e) {usr_dlg.Warn_many("", "", "page.thread.redlinks: page=~{0} err=~{1}", page_ttl_str, Err_.Message_gplx_full(e));}
@@ -286,6 +286,7 @@ class Load_files_wkr implements Gfo_thread_wkr {
public String Thread__name() {return "xowa.load_files_wkr";}
public boolean Thread__resume() {return true;}
public void Thread__exec() {
+// try {Xog_async_wkr.Async(tab);}
try {tab.Async();}
catch (Exception e) {
tab.Tab_mgr().Win().App().Usr_dlg().Warn_many("error while running file wkr; page=~{0} err=~{1}", tab.Page().Url().To_str(), Err_.Message_gplx_full(e));
diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm_read_mgr.java b/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm_read_mgr.java
index 9f1bafd86..adfb77cee 100644
--- a/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm_read_mgr.java
+++ b/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm_read_mgr.java
@@ -18,7 +18,7 @@ along with this program. If not, see .
package gplx.xowa.guis.views; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*;
import gplx.core.threads.*;
import gplx.gfui.*; import gplx.gfui.controls.standards.*; import gplx.xowa.guis.langs.*; import gplx.xowa.guis.history.*;
-import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.wikis.pages.*;
+import gplx.xowa.wikis.pages.lnkis.*; import gplx.xowa.wikis.pages.*;
public class Xog_tab_itm_read_mgr {
public static void Show_page(Xog_tab_itm tab, Xoae_page new_page, boolean reset_to_read) {Show_page(tab, new_page, reset_to_read, false, false, Xog_history_stack.Nav_fwd);}
public static void Show_page(Xog_tab_itm tab, Xoae_page new_page, boolean reset_to_read, boolean new_page_is_same, boolean show_is_err, byte history_nav_type) {
diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm.java b/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm.java
index 742403660..c7541f516 100644
--- a/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm.java
+++ b/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm.java
@@ -22,7 +22,7 @@ import gplx.xowa.guis.*; import gplx.xowa.guis.history.*; import gplx.xowa.guis.
import gplx.xowa.langs.*; import gplx.xowa.langs.msgs.*;
import gplx.xowa.wikis.pages.*; import gplx.xowa.apps.urls.*; import gplx.xowa.files.*;
import gplx.xowa.htmls.hrefs.*;
-import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.specials.*; import gplx.xowa.xtns.math.*;
+import gplx.xowa.wikis.pages.lnkis.*; import gplx.xowa.specials.*; import gplx.xowa.xtns.math.*;
public class Xog_win_itm implements Gfo_invk, Gfo_evt_itm {
private Gfo_invk sync_cmd;
private Xog_url_box__selection_changed url_box__selection_changed;
@@ -67,6 +67,7 @@ public class Xog_win_itm implements Gfo_invk, Gfo_evt_itm {
else if (ctx.Match(k, Gfui_html.Evt_location_changing)) Page__navigate_by_href(tab_mgr.Active_tab(), Xoh_href_gui_utl.Standardize_xowa_link(m.ReadStr("v")));
else if (ctx.Match(k, Gfui_html.Evt_win_resized)) Refresh_win_size();
else if (ctx.Match(k, Invk_page_refresh)) Page__refresh();
+ // else if (ctx.Match(k, Invk_page_async_exec)) Xog_async_wkr.Async(((Xog_tab_itm)m.ReadObj("v")));
else if (ctx.Match(k, Invk_page_async_exec)) ((Xog_tab_itm)m.ReadObj("v")).Async();
else if (ctx.Match(k, Invk_page_view_read)) Page__mode_(Xopg_page_.Tid_read);
else if (ctx.Match(k, Invk_page_view_edit)) Page__mode_(Xopg_page_.Tid_edit);
diff --git a/400_xowa/src/gplx/xowa/htmls/Xoh_page.java b/400_xowa/src/gplx/xowa/htmls/Xoh_page.java
index 320a57993..2249e2436 100644
--- a/400_xowa/src/gplx/xowa/htmls/Xoh_page.java
+++ b/400_xowa/src/gplx/xowa/htmls/Xoh_page.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa.htmls; import gplx.*; import gplx.xowa.*;
-import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.skins.*; import gplx.xowa.files.*;
+import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.skins.*; import gplx.xowa.wikis.pages.lnkis.*; import gplx.xowa.files.*;
import gplx.xowa.htmls.heads.*; import gplx.xowa.htmls.sections.*; import gplx.xowa.htmls.core.makes.imgs.*;
public class Xoh_page implements Xoa_page {
// core
@@ -44,8 +44,8 @@ public class Xoh_page implements Xoa_page {
public Xopg_html_data Html_data() {return html_data;} private Xopg_html_data html_data = new Xopg_html_data();
public byte[] Redirect_to_ttl() {return redirect_to_ttl;} private byte[] redirect_to_ttl; public void Redirect_to_ttl_(byte[] v) {this.redirect_to_ttl = v;}
-
// util
+ public Xopg_lnki_list Redlink_list() {return redlink_list;} private Xopg_lnki_list redlink_list;
public Xoa_page__commons_mgr Commons_mgr() {return commons_mgr;} private final Xoa_page__commons_mgr commons_mgr = new Xoa_page__commons_mgr();
public int Exec_tid() {return exec_tid;} private int exec_tid = Xof_exec_tid.Tid_wiki_page;
public byte[] Html_head_xtn() {return html_head_xtn;} public void Html_head_xtn_(byte[] v) {html_head_xtn = v;} private byte[] html_head_xtn = Bry_.Empty; // drd:web_browser
@@ -53,6 +53,7 @@ public class Xoh_page implements Xoa_page {
public void Init(Xow_wiki wiki, Xoa_url page_url, Xoa_ttl page_ttl, int page_id) {
this.wiki = wiki; this.page_url = page_url; this.page_ttl = page_ttl; this.page_id = page_id;
this.Clear();
+ this.redlink_list = new Xopg_lnki_list(page_ttl.Ns().Id_is_module());
}
public void Ctor_by_db(int head_flag, byte[] display_ttl, byte[] content_sub, byte[] sidebar_div, int zip_tid, int hzip_tid, byte[] body) {
head_mgr.Flag_(head_flag);
diff --git a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java
index ea5f63ee8..23eeb199e 100644
--- a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java
+++ b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java
@@ -40,7 +40,7 @@ public class Xoh_page_wtr_wkr {
case Xopg_page_.Tid_edit: fmtr = mgr.Page_edit_fmtr(); break;
case Xopg_page_.Tid_html: fmtr = mgr.Page_read_fmtr(); view_mode = Xopg_page_.Tid_read; break; // set view_mode to read, so that "read" is highlighted in HTML
case Xopg_page_.Tid_read: fmtr = mgr.Page_read_fmtr();
- ctx.Page().Redlink_lnki_list().Clear(); // not sure if this is the best place to put it, but redlinks (a) must only fire once; (b) must fire before html generation; (c) cannot fire during edit (preview will handle separately)
+ ctx.Page().Redlink_list().Clear(); // not sure if this is the best place to put it, but redlinks (a) must only fire once; (b) must fire before html generation; (c) cannot fire during edit (preview will handle separately)
break;
}
Bry_bfr page_bfr = Xoa_app_.Utl__bfr_mkr().Get_m001(); // NOTE: get separate page bfr to output page; do not reuse tmp_bfr b/c it will be used inside Fmt_do
diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_hzip.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_hzip.java
index 59136d5b8..3175b7878 100644
--- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_hzip.java
+++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_hzip.java
@@ -140,6 +140,11 @@ public class Xoh_lnki_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm {
break;
}
}
+
+ // generate stub for redlink
+// Xopg_lnki_itm__hdump lnki_itm = new Xopg_lnki_itm__hdump(null);
+// hpg.Redlink_list().Add(lnki_itm);
+
// gen html
bfr.Add(Gfh_bldr_.Bry__a_lhs_w_href);
switch (href_type) {
@@ -166,7 +171,7 @@ public class Xoh_lnki_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm {
}
if (cls_bry != null) bfr.Add(Gfh_bldr_.Bry__cls__nth).Add(cls_bry);
if (!hctx.Mode_is_diff())
- bfr.Add(Gfh_bldr_.Bry__id__nth).Add_str_a7(gplx.xowa.parsers.lnkis.redlinks.Xopg_redlink_lnki_list.Lnki_id_prefix).Add_int_variable(hctx.Uid__lnki_nxt());
+ bfr.Add(Gfh_bldr_.Bry__id__nth).Add_str_a7(gplx.xowa.wikis.pages.lnkis.Xopg_lnki_list.Lnki_id_prefix).Add_int_variable(hctx.Uid__lnki_nxt());
if ( href_type != Xoh_anch_href_data.Tid__anch) { // anchs never have title;
if (title_bry != null) {
bfr.Add(Gfh_bldr_.Bry__title__nth);
diff --git a/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xopg_redlink_idx_list.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xopg_lnki_itm__hdump.java
similarity index 57%
rename from 400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xopg_redlink_idx_list.java
rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xopg_lnki_itm__hdump.java
index fbece6f1c..fa7f4165c 100644
--- a/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xopg_redlink_idx_list.java
+++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xopg_lnki_itm__hdump.java
@@ -15,19 +15,10 @@ 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.parsers.lnkis.redlinks; import gplx.*; import gplx.xowa.*; import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.*;
-import gplx.core.primitives.*;
-public class Xopg_redlink_idx_list {
- private final Int_list list = new Int_list();
- public int Len() {return list.Len();}
- public int Max() {return max;} private int max;
- public int Get_at(int i) {return list.Get_at(i);}
- public void Clear() {
- list.Clear();
- max = 0;
- }
- public void Add(int i) {
- list.Add(i);
- if (i > max) max = i;
- }
+package gplx.xowa.htmls.core.wkrs.lnkis; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*;
+import gplx.xowa.wikis.pages.lnkis.*;
+class Xopg_lnki_itm__hdump implements Xopg_lnki_itm {
+ public Xopg_lnki_itm__hdump(Xoa_ttl ttl) {this.ttl = ttl;}
+ public Xoa_ttl Ttl() {return ttl;} private final Xoa_ttl ttl;
+ public int Html_uid() {return html_uid;} private int html_uid; public void Html_uid_(int v) {html_uid = v;}
}
diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_wtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_wtr.java
index 5ca425139..266d2d948 100644
--- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_wtr.java
+++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_wtr.java
@@ -20,14 +20,14 @@ import gplx.langs.htmls.*; import gplx.xowa.files.*; import gplx.xowa.users.hist
import gplx.xowa.wikis.nss.*;
import gplx.xowa.wikis.xwikis.*; import gplx.xowa.xtns.wdatas.core.*;
import gplx.xowa.htmls.core.htmls.*; import gplx.xowa.htmls.core.hzips.*;
-import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.*; import gplx.xowa.parsers.lnkis.redlinks.*;
+import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.*; import gplx.xowa.wikis.pages.lnkis.*;
public class Xoh_lnki_wtr {
private Xoae_app app; private Xowe_wiki wiki; private Xoae_page page; private Xop_ctx ctx;
private Xoh_html_wtr_cfg cfg;
private Xou_history_mgr history_mgr;
private Xop_lnki_caption_wtr_tkn caption_tkn_wtr;
private Xop_lnki_caption_wtr_bry caption_bry_wtr;
- private Xopg_redlink_lnki_list redlinks_mgr;
+ private Xopg_lnki_list redlinks_mgr;
public Xoh_lnki_wtr(Xoh_html_wtr html_wtr, Xowe_wiki wiki, Xow_html_mgr html_mgr, Xoh_html_wtr_cfg cfg) {
caption_tkn_wtr = new Xop_lnki_caption_wtr_tkn(html_wtr);
caption_bry_wtr = new Xop_lnki_caption_wtr_bry();
@@ -38,7 +38,7 @@ public class Xoh_lnki_wtr {
public void Init_by_page(Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xoae_page page) {
this.ctx = ctx; this.page = page; // NOTE: must set ctx for file.v2; DATE:2014-06-22
this.wiki = ctx.Wiki();
- redlinks_mgr = page.Redlink_lnki_list(); // NOTE: need to set redlinks_mgr, else toc parse may fail; EX:pl.d:head_sth_off;DATE:2014-05-07
+ redlinks_mgr = page.Redlink_list(); // NOTE: need to set redlinks_mgr, else toc parse may fail; EX:pl.d:head_sth_off;DATE:2014-05-07
file_wtr.Init_by_page(hctx, page);
this.history_mgr = app.Usere().History_mgr();
if (hctx.Mode_is_hdump()) cfg.Lnki__id_(false);
@@ -61,7 +61,7 @@ public class Xoh_lnki_wtr {
return;
}
boolean literal_link = lnki_ttl.ForceLiteralLink(); // NOTE: if literal link, then override ns behavior; for File, do not show image; for Ctg, do not display at bottom of page
- redlinks_mgr.Lnki_add(lnki);
+ redlinks_mgr.Add(lnki);
boolean stage_is_alt = hctx.Mode_is_alt();
switch (lnki.Ns_id()) {
case Xow_ns_.Tid__media: if (!stage_is_alt) file_wtr.Write_or_queue(bfr, page, ctx, hctx, src, lnki); return; // NOTE: literal ":" has no effect; PAGE:en.w:Beethoven and [[:Media:De-Ludwig_van_Beethoven.ogg|listen]]
diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/to_delete/Xohd_page_html_mgr__load.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/to_delete/Xohd_page_html_mgr__load.java
deleted file mode 100644
index 7e1d6b658..000000000
--- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/to_delete/Xohd_page_html_mgr__load.java
+++ /dev/null
@@ -1,86 +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 .
-*/
-//namespace gplx.xowa.htmls.core.to_delete {
-// using gplx.core.primitives; using gplx.core.btries; using gplx.dbs; using gplx.core.ios;
-// using gplx.xowa.wikis.dbs; using gplx.xowa.wikis.pages; using gplx.xowa.htmls.core.makes.imgs; using gplx.xowa.wikis.pages.skins;
-// using gplx.xowa.wikis.data; using gplx.xowa.wikis.data.tbls; using gplx.xowa.guis;
-// public class Xohd_page_html_mgr__load {
-// private final Bry_rdr_old rdr = new Bry_rdr_old(); private final List_adp rows = List_adp_.New(), imgs = List_adp_.New();
-// public void Load_page(Xow_wiki wiki, Xoh_page hpg, Xowd_html_tbl tbl, int page_id, Xoa_ttl page_ttl) {
-// Xoa_app_.Usr_dlg().Plog_many("", "", "hdump.load.text: ttl=~{0}", page_ttl.Full_db_as_str());
-// tbl.Select_by_page(rows, page_id);
-// Parse_rows(wiki, hpg, page_id, Xoa_url.blank(), page_ttl, rows);
-// }
-// public void Parse_rows(Xow_wiki wiki, Xoh_page hpg, int page_id, Xoa_url page_url, Xoa_ttl page_ttl, List_adp rows) { // TEST:
-// hpg.Init(wiki, page_id, page_url, page_ttl);
-// imgs.Clear();
-// int len = rows.Count();
-// for (int i = 0; i < len; ++i) {
-// Xowd_html_row row = (Xowd_html_row)rows.Get_at(i);
-// switch (row.Tid()) {
-// case Xowd_html_row.Tid__img:
-// case Xowd_html_row.Tid__redlink:
-// Parse_data(hpg, row); break;
-// }
-// }
-// rows.Clear();
-// }
-// private void Parse_data(Xoh_page hpg, Xowd_html_row row) {
-// rdr.Init(row.Data());
-// while (!rdr.Pos_is_eos()) {
-// int tid = rdr.Read_int_to_pipe();
-// switch (tid) {
-// case Xohd_img_tid.Tid_img : Load_data_img(); break; // 1|0|A.png|0|220|110|...
-// case Xohd_img_tid.Tid_gallery : Load_data_gallery(hpg); break; // 3|0|800
-// case Xohd_img_tid.Tid_redlink : Load_data_redlink(hpg); break; // 2|2|0|1
-// }
-// }
-// if (imgs.Count() > 0) hpg.Img_itms_((Xohd_img_itm__base[])imgs.To_ary_and_clear(typeof(Xohd_img_itm__base)));
-// }
-// public static Xohd_img_itm__base Load_img(Bry_rdr_old rdr) {
-// int tid = rdr.Read_int_to_pipe();
-// Xohd_img_itm__base img_itm = null;
-// switch (tid) {
-// case Xohd_img_itm__base.Tid_basic : img_itm = new Xohd_img_itm__img(); break;
-// case Xohd_img_itm__base.Tid_gallery : img_itm = new Xohd_img_itm__gallery_itm(); break;
-// default : throw Err_.new_unhandled(tid);
-// }
-// img_itm.Data_parse(rdr);
-// // Xoa_app_.Usr_dlg().Log_many("", "", "itm: ~{0}", img_itm.Data_print());
-// rdr.Pos_add_one();
-// return img_itm;
-// }
-// private void Load_data_img() {
-// Xohd_img_itm__base img = Load_img(rdr);
-// if (img == null) return;
-// imgs.Add(img);
-// }
-// private void Load_data_redlink(Xoh_page hpg) {
-// Ordered_hash redlink_hash = hpg.Redlink_uids();
-// while (!rdr.Pos_is_eos()) {
-// Int_obj_ref redlink_uid = Int_obj_ref.New(rdr.Read_int_to_pipe());
-// redlink_hash.Add(redlink_uid, redlink_uid);
-// }
-// }
-// private void Load_data_gallery(Xoh_page hpg) {
-// int uid = rdr.Read_int_to_pipe();
-// int box_max = rdr.Read_int_to_pipe();
-// hpg.Gallery_itms().Add_if_dupe_use_nth(uid, new Xohd_img_itm__gallery_mgr(uid, box_max)); // TODO_OLD: temporarily added b/c last build did not add gallery uid correctly
-// }
-// }
-//}
diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/to_delete/Xohd_page_html_mgr__save.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/to_delete/Xohd_page_html_mgr__save.java
deleted file mode 100644
index 362687714..000000000
--- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/to_delete/Xohd_page_html_mgr__save.java
+++ /dev/null
@@ -1,50 +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 .
-*/
-//namespace gplx.xowa.htmls.core.to_delete {
-// using gplx.xowa.wikis.data; using gplx.xowa.wikis.data.tbls; using gplx.xowa.htmls.core.makes.imgs;
-// using gplx.xowa.guis; using gplx.xowa.wikis.pages; using gplx.xowa.parsers.lnkis.redlinks;
-// public class Xohd_page_html_mgr__save {
-// public void Update(Bry_bfr tmp_bfr, Xowd_html_tbl tbl, Xoae_page page) {
-// Xoh_page hpg = new Xoh_page().Ctor_by_page(tmp_bfr, page);
-// tbl.Delete(page.Revision_data().Id());
-// this.Insert(tmp_bfr, tbl, hpg, page.Hdump_data());
-// }
-// public int Insert(Bry_bfr tmp_bfr, Xowd_html_tbl tbl, Xoh_page hpg, Xopg_hdump_data hdump_data) {
-// int rv = 0;
-// int page_id = hpg.Page_id();
-// rv += Insert_row(tbl, page_id, Xowd_html_row.Tid__img , Write_imgs(tmp_bfr, hdump_data.Imgs()));
-// rv += Insert_row(tbl, page_id, Xowd_html_row.Tid__redlink , Write_redlinks(tmp_bfr, hdump_data.Redlink_mgr()));
-// return rv;
-// }
-// private int Insert_row(Xowd_html_tbl tbl, int page_id, int row_tid, byte[] bry) {return bry == null ? 0 : tbl.Insert(page_id, row_tid, bry);}
-// public static byte[] Write_redlinks(Bry_bfr bfr, Xopg_redlink_idx_list redlink_mgr) {
-// int len = redlink_mgr.Len(); if (len == 0) return null;
-// for (int i = 0; i < len; ++i)
-// bfr.Add_int_variable(redlink_mgr.Get_at(i)).Add_byte_pipe();
-// return bfr.To_bry_and_clear();
-// }
-// public static byte[] Write_imgs(Bry_bfr bfr, List_adp imgs) {
-// int len = imgs.Count(); if (len == 0) return null; // no images; exit early, else will write blank String
-// for (int i = 0; i < len; ++i) {
-// Xohd_img_itm itm = (Xohd_img_itm)imgs.Get_at(i);
-// itm.Data_write(bfr);
-// }
-// return bfr.To_bry_and_clear();
-// }
-// }
-//}
diff --git a/400_xowa/src/gplx/xowa/langs/vnts/converts/Xol_convert_mgr.java b/400_xowa/src/gplx/xowa/langs/vnts/converts/Xol_convert_mgr.java
index 97255df22..c399dfc87 100644
--- a/400_xowa/src/gplx/xowa/langs/vnts/converts/Xol_convert_mgr.java
+++ b/400_xowa/src/gplx/xowa/langs/vnts/converts/Xol_convert_mgr.java
@@ -37,19 +37,19 @@ public class Xol_convert_mgr {
converter.Convert_text(tmp_bfr, src, bgn, end);
return tmp_bfr.To_bry_and_rls();
}
- public Xowd_page_itm Convert_ttl(Xowe_wiki wiki, Xoa_ttl ttl) {return Convert_ttl(wiki, ttl.Ns(), ttl.Page_db());} // NOTE: not Full_db as ttl.Ns is passed; EX:Шаблон:Šablon:Jez-eng; PAGE:sr.w:ДНК DATE:2014-07-06
- public Xowd_page_itm Convert_ttl(Xowe_wiki wiki, Xow_ns ns, byte[] ttl_bry) {
+ public Xowd_page_itm Convert_ttl(Xow_wiki wiki, Xoa_ttl ttl) {return Convert_ttl(wiki, ttl.Ns(), ttl.Page_db());} // NOTE: not Full_db as ttl.Ns is passed; EX:Шаблон:Šablon:Jez-eng; PAGE:sr.w:ДНК DATE:2014-07-06
+ public Xowd_page_itm Convert_ttl(Xow_wiki wiki, Xow_ns ns, byte[] ttl_bry) {
Bry_bfr tmp_bfr = Xoa_app_.Utl__bfr_mkr().Get_b512();
Xowd_page_itm rv = Convert_ttl(wiki, tmp_bfr, ns, ttl_bry);
tmp_bfr.Mkr_rls();
return rv;
}
- private Xowd_page_itm Convert_ttl(Xowe_wiki wiki, Bry_bfr tmp_bfr, Xow_ns ns, byte[] ttl_bry) { // REF.MW:LanguageConverter.php|findVariantLink
+ private Xowd_page_itm Convert_ttl(Xow_wiki wiki, Bry_bfr tmp_bfr, Xow_ns ns, byte[] ttl_bry) { // REF.MW:LanguageConverter.php|findVariantLink
synchronized (tmp_page_list) { // THREAD:
int converted = Convert_ttl__convert_each_vnt(wiki, tmp_bfr, ns, ttl_bry); // convert ttl for each vnt
if (converted == 0) return Xowd_page_itm.Null; // ttl_bry has no conversions; exit;
// wiki.Data__core_mgr().Tbl__page().Select_in__ns_ttl(Cancelable_.Never, tmp_page_list, wiki.Ns_mgr(), true, 0, converted); // TODO_OLD: use this call; when defaulting test to use db_mgr, not txt_mgr
- wiki.Db_mgr().Load_mgr().Load_by_ttls(Cancelable_.Never, tmp_page_list, Bool_.Y, 0, converted);
+ ((Xowe_wiki)wiki).Db_mgr().Load_mgr().Load_by_ttls(Cancelable_.Never, tmp_page_list, Bool_.Y, 0, converted);
for (int i = 0; i < converted; i++) {
Xowd_page_itm page = (Xowd_page_itm)tmp_page_list.Get_at(i);
if (page.Exists()) return page; // return 1st found page
diff --git a/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_tkn.java b/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_tkn.java
index 405d23f7f..9c15c004d 100644
--- a/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_tkn.java
+++ b/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_tkn.java
@@ -19,7 +19,7 @@ package gplx.xowa.parsers.lnkis; import gplx.*; import gplx.xowa.*; import gplx.
import gplx.xowa.files.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.wkrs.lnkis.htmls.*; import gplx.xowa.xtns.pfuncs.ttls.*;
import gplx.xowa.wikis.nss.*;
import gplx.xowa.parsers.tmpls.*;
-public class Xop_lnki_tkn extends Xop_tkn_itm_base {
+public class Xop_lnki_tkn extends Xop_tkn_itm_base implements gplx.xowa.wikis.pages.lnkis.Xopg_lnki_itm {
@Override public byte Tkn_tid() {return tkn_tid;} private byte tkn_tid = Xop_tkn_itm_.Tid_lnki;
public void Tkn_tid_to_txt() {tkn_tid = Xop_tkn_itm_.Tid_txt;}
public int Ns_id() {return ns_id;} public Xop_lnki_tkn Ns_id_(int v) {ns_id = v; return this;} private int ns_id;
@@ -46,7 +46,7 @@ public class Xop_lnki_tkn extends Xop_tkn_itm_base {
public boolean Alt_exists() {return alt_tkn != Arg_nde_tkn.Null;}
public int Subpage_tid() {return subpage_tid;} public Xop_lnki_tkn Subpage_tid_(int v) {subpage_tid = v; return this;} private int subpage_tid = Pfunc_rel2abs.Id_null;
public boolean Subpage_slash_at_end() {return subpage_slash_at_end;} public Xop_lnki_tkn Subpage_slash_at_end_(boolean v) {subpage_slash_at_end = v; return this;} private boolean subpage_slash_at_end;
- public int Html_uid() {return html_uid;} public Xop_lnki_tkn Html_uid_(int v) {html_uid = v; return this;} private int html_uid;
+ public int Html_uid() {return html_uid;} public void Html_uid_(int v) {html_uid = v;} private int html_uid;
public int Pipe_count() {return pipe_count;} private int pipe_count;
public boolean Pipe_count_is_zero() {return pipe_count++ == 0;}
public boolean Xtn_sites_link() {return xtn_sites_link;} public void Xtn_sites_link_(boolean v) {xtn_sites_link = v;} private boolean xtn_sites_link;
diff --git a/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_wkr_.java b/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_wkr_.java
index 6b91f6e39..4bf152f05 100644
--- a/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_wkr_.java
+++ b/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_wkr_.java
@@ -20,7 +20,7 @@ import gplx.core.primitives.*; import gplx.core.btries.*;
import gplx.xowa.langs.*;
import gplx.xowa.wikis.nss.*;
import gplx.xowa.wikis.*; import gplx.xowa.xtns.pfuncs.ttls.*; import gplx.xowa.xtns.relatedSites.*;
-import gplx.xowa.parsers.tmpls.*; import gplx.xowa.parsers.lnkis.redlinks.*;
+import gplx.xowa.parsers.tmpls.*; import gplx.xowa.wikis.pages.lnkis.*;
public class Xop_lnki_wkr_ {
private static final Int_obj_ref rel2abs_tid = Int_obj_ref.New_zero();
public static final int Invalidate_lnki_len = 128;
diff --git a/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xog_redlink_mgr.java b/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xog_redlink_mgr.java
deleted file mode 100644
index 6c87adecd..000000000
--- a/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xog_redlink_mgr.java
+++ /dev/null
@@ -1,117 +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.parsers.lnkis.redlinks; import gplx.*; import gplx.xowa.*; import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.*;
-import gplx.core.primitives.*;
-import gplx.xowa.wikis.data.tbls.*;
-import gplx.xowa.langs.vnts.*; import gplx.xowa.guis.views.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.htmls.core.makes.imgs.*;
-import gplx.xowa.parsers.tmpls.*;
-public class Xog_redlink_mgr implements Gfo_invk {
- private Gfo_usr_dlg usr_dlg; private Xog_html_itm html_itm; private Xowe_wiki wiki; private Xoae_page page;
- private Xopg_redlink_lnki_list redlink_lnki_list; private List_adp lnki_list; private int thread_id;
- public Xog_redlink_mgr(Xoae_page page) {
- this.page = page; this.wiki = page.Wikie();
- this.html_itm = page.Tab_data().Tab().Html_itm(); // NOTE: caching locally b/c page.Tab() is sometimes null
- this.redlink_lnki_list = page.Redlink_lnki_list();
- this.lnki_list = redlink_lnki_list.Lnki_list();
- this.thread_id = redlink_lnki_list.Thread_id();
- this.usr_dlg = Gfo_usr_dlg_.Instance;
- }
- public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
- if (ctx.Match(k, Invk_run)) Redlink();
- else return Gfo_invk_.Rv_unhandled;
- return this;
- } public static final String Invk_run = "run";
- public void Redlink() {
- synchronized (this) { // NOTE: attempt to eliminate random IndexBounds errors; DATE:2014-09-02
- if (redlink_lnki_list.Disabled()) return;
- List_adp work_list = List_adp_.New();
- Ordered_hash page_hash = Ordered_hash_.New_bry();
- page_hash.Clear(); // NOTE: do not clear in Page_bgn, else will fail b/c of threading; EX: Open Page -> Preview -> Save; DATE:2013-11-17
- work_list.Clear();
- int len = lnki_list.Count();
- usr_dlg.Log_many("", "", "redlink.redlink_bgn: page=~{0} total_links=~{1}", String_.new_u8(page.Ttl().Raw()), len);
- for (int i = 0; i < len; i++) { // make a copy of list else thread issues
- if (usr_dlg.Canceled()) return;
- if (redlink_lnki_list.Thread_id() != thread_id) return;
- work_list.Add(lnki_list.Get_at(i));
- }
- for (int i = 0; i < len; i++) {
- if (usr_dlg.Canceled()) return;
- if (redlink_lnki_list.Thread_id() != thread_id) return;
- Xop_lnki_tkn lnki = (Xop_lnki_tkn)work_list.Get_at(i);
- Xoa_ttl ttl = lnki.Ttl();
- Xowd_page_itm db_page = new Xowd_page_itm().Ttl_(ttl);
- byte[] full_txt = ttl.Full_db();
- if (!page_hash.Has(full_txt))
- page_hash.Add(full_txt, db_page);
- }
- int page_len = page_hash.Count();
- for (int i = 0; i < page_len; i += Batch_size) {
- if (usr_dlg.Canceled()) return;
- if (redlink_lnki_list.Thread_id() != thread_id) return;
- int end = i + Batch_size;
- if (end > page_len) end = page_len;
- wiki.Db_mgr().Load_mgr().Load_by_ttls(usr_dlg, page_hash, Bool_.Y, i, end);
- }
- int redlink_count = 0;
- boolean variants_enabled = wiki.Lang().Vnt_mgr().Enabled();
- Xol_vnt_mgr vnt_mgr = wiki.Lang().Vnt_mgr();
- Xopg_redlink_idx_list redlink_mgr = page.Hdump_data().Redlink_mgr();
- for (int j = 0; j < len; j++) {
- Xop_lnki_tkn lnki = (Xop_lnki_tkn)work_list.Get_at(j);
- byte[] full_db = lnki.Ttl().Full_db();
- Xowd_page_itm db_page = (Xowd_page_itm)page_hash.Get_by(full_db);
- if (db_page == null) continue; // pages shouldn't be null, but just in case
- if (!db_page.Exists()) {
- String lnki_id = Xopg_redlink_lnki_list.Lnki_id_prefix + Int_.To_str(lnki.Html_uid());
- if (variants_enabled) {
- Xowd_page_itm vnt_page = vnt_mgr.Convert_mgr().Convert_ttl(wiki, lnki.Ttl());
- if (vnt_page != null) {
- Xoa_ttl vnt_ttl = Xoa_ttl.parse(wiki, lnki.Ttl().Ns().Id(), vnt_page.Ttl_page_db());
- html_itm.Html_atr_set(lnki_id, "href", "/wiki/" + String_.new_u8(vnt_ttl.Full_url()));
- if (!String_.Eq(vnt_mgr.Html__lnki_style(), ""))
- html_itm.Html_atr_set(lnki_id, "style", vnt_mgr.Html__lnki_style());
- continue;
- }
- }
- if (usr_dlg.Canceled()) return;
- if (redlink_lnki_list.Thread_id() != thread_id) return;
- int uid = lnki.Html_uid();
- gplx.xowa.files.gui.Js_img_mgr.Update_link_missing(html_itm, Xopg_redlink_lnki_list.Lnki_id_prefix + Int_.To_str(uid));
- redlink_mgr.Add(uid);
- ++redlink_count;
- }
- }
- usr_dlg.Log_many("", "", "redlink.redlink_end: redlinks_run=~{0}", redlink_count);
- }
- }
- public static final Xog_redlink_mgr Null = new Xog_redlink_mgr(); Xog_redlink_mgr() {}
- private static final int Batch_size = 32;
-}
-class Xog_redlink_wkr {
- public static void Redlink(Xog_html_itm html_itm, Int_list list) {
- int len = list.Len();
- for (int i = 0; i < len; ++i) {
- int uid = list.Get_at(i);
- Redlink(html_itm, uid);
- }
- }
- public static void Redlink(Xog_html_itm html_itm, int uid) {
- gplx.xowa.files.gui.Js_img_mgr.Update_link_missing(html_itm, Xopg_redlink_lnki_list.Lnki_id_prefix + Int_.To_str(uid));
- }
-}
diff --git a/400_xowa/src/gplx/xowa/wikis/pages/Xopg_hdump_data.java b/400_xowa/src/gplx/xowa/wikis/pages/Xopg_hdump_data.java
index 4b7737f7a..480177e1d 100644
--- a/400_xowa/src/gplx/xowa/wikis/pages/Xopg_hdump_data.java
+++ b/400_xowa/src/gplx/xowa/wikis/pages/Xopg_hdump_data.java
@@ -17,10 +17,9 @@ along with this program. If not, see .
*/
package gplx.xowa.wikis.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*;
import gplx.xowa.htmls.core.makes.imgs.*; import gplx.xowa.files.*;
-import gplx.xowa.parsers.lnkis.redlinks.*;
+import gplx.xowa.wikis.pages.lnkis.*;
public class Xopg_hdump_data {
public byte[] Body() {return body;} public void Body_(byte[] v) {body = v;} private byte[] body;
- public Xopg_redlink_idx_list Redlink_mgr() {return redlink_mgr;} private final Xopg_redlink_idx_list redlink_mgr = new Xopg_redlink_idx_list();
public List_adp Imgs() {return imgs;} private final List_adp imgs = List_adp_.New();
public void Imgs_add(Xohd_img_itm itm) {imgs.Add(itm);}
public void Imgs_add_img(Xohd_img_itm__base img, Xof_file_itm xfer, int tid) {
@@ -34,6 +33,5 @@ public class Xopg_hdump_data {
public void Clear() {
body = null;
imgs.Clear();
- redlink_mgr.Clear();
}
}
diff --git a/400_xowa/src/gplx/xowa/files/Xof_redlink_wkr.java b/400_xowa/src/gplx/xowa/wikis/pages/lnkis/Xopg_lnki_itm.java
similarity index 54%
rename from 400_xowa/src/gplx/xowa/files/Xof_redlink_wkr.java
rename to 400_xowa/src/gplx/xowa/wikis/pages/lnkis/Xopg_lnki_itm.java
index 71ebea6c3..c509bc030 100644
--- a/400_xowa/src/gplx/xowa/files/Xof_redlink_wkr.java
+++ b/400_xowa/src/gplx/xowa/wikis/pages/lnkis/Xopg_lnki_itm.java
@@ -15,21 +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 .
*/
-package gplx.xowa.files; import gplx.*; import gplx.xowa.*;
-import gplx.core.threads.*;
-import gplx.xowa.files.gui.*;
-class Xof_redlink_wkr implements Gfo_thread_wkr {
- private Xog_js_wkr js_wkr; private int[] uids;
- public Xof_redlink_wkr(Xog_js_wkr js_wkr, int[] uids) {
- this.js_wkr = js_wkr; this.uids = uids;
- }
- public String Thread__name() {return "xowa.redlinks";}
- public boolean Thread__resume() {return true;}
- public void Thread__exec() {
- int len = uids.length;
- for (int i = 0; i < len; ++i) {
- int uid = uids[i];
- js_wkr.Html_atr_set(Int_.To_str(uid), "", "");
- }
- }
+package gplx.xowa.wikis.pages.lnkis; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.pages.*;
+public interface Xopg_lnki_itm {
+ Xoa_ttl Ttl();
+ int Html_uid(); void Html_uid_(int v);
}
diff --git a/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xopg_redlink_lnki_list.java b/400_xowa/src/gplx/xowa/wikis/pages/lnkis/Xopg_lnki_list.java
similarity index 60%
rename from 400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xopg_redlink_lnki_list.java
rename to 400_xowa/src/gplx/xowa/wikis/pages/lnkis/Xopg_lnki_list.java
index 902545942..256a8bff6 100644
--- a/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xopg_redlink_lnki_list.java
+++ b/400_xowa/src/gplx/xowa/wikis/pages/lnkis/Xopg_lnki_list.java
@@ -15,26 +15,21 @@ 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.parsers.lnkis.redlinks; import gplx.*; import gplx.xowa.*; import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.*;
-import gplx.xowa.wikis.nss.*;
-import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.users.*;
-public class Xopg_redlink_lnki_list {
- private int lnki_idx = gplx.xowa.htmls.core.wkrs.lnkis.htmls.Xoh_lnki_wtr.Lnki_id_min; // NOTE: default to 1, not 0, b/c 0 is ignored by wtr; DATE:2014-10-09
- public Xopg_redlink_lnki_list(boolean ttl_is_module) { // never redlink in Module ns; particularly since Lua has multi-line comments for [[ ]]
+package gplx.xowa.wikis.pages.lnkis; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.pages.*;
+import gplx.xowa.wikis.nss.*; import gplx.xowa.parsers.lnkis.*;
+public class Xopg_lnki_list {
+ private final List_adp list = List_adp_.New();
+ private int lnki_idx;
+ public Xopg_lnki_list(boolean ttl_is_module) { // never redlink in Module ns; particularly since Lua has multi-line comments for [[ ]]
this.disabled = ttl_is_module;
+ this.Clear();
}
- public boolean Disabled() {return disabled;} private final boolean disabled;
- public List_adp Lnki_list() {return lnki_list;} private final List_adp lnki_list = List_adp_.New();
- public int Thread_id() {return thread_id;} private int thread_id = 1;
- public void Clear() {
+ public boolean Disabled() {return disabled;} private final boolean disabled;
+ public int Len() {return list.Len();}
+ public Xopg_lnki_itm Get_at(int i) {return (Xop_lnki_tkn)list.Get_at(i);}
+ public void Add(Xopg_lnki_itm lnki) {
if (disabled) return;
- lnki_idx = gplx.xowa.htmls.core.wkrs.lnkis.htmls.Xoh_lnki_wtr.Lnki_id_min; // NOTE: must start at 0, so that ++lnki_idx is > 0; html_wtr checks for > 0
- lnki_list.Clear();
- thread_id++;
- }
- public void Lnki_add(Xop_lnki_tkn lnki) {
- if (disabled) return;
- Xoa_ttl ttl = lnki.Ttl(); if (ttl == null) return; // occurs for invalid links
+ Xoa_ttl ttl = lnki.Ttl(); if (ttl == null) return; // ttl is null for invalid links
Xow_ns ns = ttl.Ns();
lnki.Html_uid_(++lnki_idx); // NOTE: set html_id in order html to print out "id='xowa_lnki_1'; want to print out id for consistency's sake, even if these links won't be check for redlinks; DATE:2015-05-07
if ( ns.Id_is_file_or_media() // ignore files which will usually not be in local wiki (most are in commons), and whose html is built up separately
@@ -44,8 +39,12 @@ public class Xopg_redlink_lnki_list {
|| ttl.Wik_itm() != null // xwiki lnki; EX: simplewiki links in homewiki; [[simplewiki:Earth]]
)
return;
- lnki_list.Add(lnki);
+ list.Add(lnki);
}
+ public void Clear() {
+ lnki_idx = gplx.xowa.htmls.core.wkrs.lnkis.htmls.Xoh_lnki_wtr.Lnki_id_min; // NOTE: must start at 0, so that ++lnki_idx is > 0; html_wtr checks for > 0; DATE:2014-10-09
+ list.Clear();
+ }
+
public static final String Lnki_id_prefix = "xolnki_";
- public static final int Lnki_id_prefix_len = String_.Len(Lnki_id_prefix);
}
diff --git a/400_xowa/src/gplx/xowa/wikis/pages/lnkis/Xopg_redlink_mgr.java b/400_xowa/src/gplx/xowa/wikis/pages/lnkis/Xopg_redlink_mgr.java
new file mode 100644
index 000000000..1017fc223
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/wikis/pages/lnkis/Xopg_redlink_mgr.java
@@ -0,0 +1,87 @@
+/*
+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.wikis.pages.lnkis; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.pages.*;
+import gplx.xowa.files.gui.*;
+import gplx.xowa.wikis.data.tbls.*;
+import gplx.xowa.langs.vnts.*;
+public class Xopg_redlink_mgr implements Gfo_invk {
+ private final Xoa_page page; private final Xog_js_wkr js_wkr;
+ public Xopg_redlink_mgr(Xoa_page page, Xog_js_wkr js_wkr) {this.page = page; this.js_wkr = js_wkr; }
+ private void Redlink() {
+ Xopg_lnki_list lnki_list = page.Redlink_list(); if (lnki_list.Disabled()) return;
+ Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.Instance;
+ Xow_wiki wiki = page.Wiki();
+ Ordered_hash lnki_hash = Ordered_hash_.New_bry();
+
+ // create unique list of page_rows
+ int len = lnki_list.Len();
+ usr_dlg.Log_many("", "", "redlink.redlink_bgn: page=~{0} total_links=~{1}", page.Ttl().Raw(), len);
+ for (int i = 0; i < len; ++i) {
+ if (usr_dlg.Canceled()) return;
+ Xoa_ttl ttl = lnki_list.Get_at(i).Ttl();
+ Xowd_page_itm page_row = new Xowd_page_itm().Ttl_(ttl);
+ byte[] full_db = ttl.Full_db();
+ if (!lnki_hash.Has(full_db)) // only search page_table once for multiple identical redlinks; EX: "[[Missing]] [[Missing]]"
+ lnki_hash.Add(full_db, page_row);
+ }
+
+ // load page_rows from page_tbl
+ int page_len = lnki_hash.Len();
+ for (int i = 0; i < page_len; i += Batch_size) {
+ if (usr_dlg.Canceled()) return;
+ int end = i + Batch_size; if (end > page_len) end = page_len;
+ wiki.Data__core_mgr().Tbl__page().Select_in__ns_ttl(usr_dlg, lnki_hash, wiki.Ns_mgr(), Bool_.Y, i, end);
+ // wiki.Db_mgr().Load_mgr().Load_by_ttls(usr_dlg, lnki_hash, Bool_.Y, i, end);
+ }
+
+ // cross-check page_rows against lnki_list; redlink if missing;
+ boolean vnt_enabled = wiki.Lang().Vnt_mgr().Enabled();
+ Xol_vnt_mgr vnt_mgr = wiki.Lang().Vnt_mgr();
+ int redlink_count = 0;
+ for (int i = 0; i < len; ++i) {
+ Xopg_lnki_itm lnki = lnki_list.Get_at(i);
+ byte[] full_db = lnki.Ttl().Full_db();
+ Xowd_page_itm page_row = (Xowd_page_itm)lnki_hash.Get_by(full_db);
+ if (page_row.Exists()) continue; // page exists; nothing to do;
+
+ // for vnt languages, convert missing ttl to vnt and check again; EX: [[zh_cn]] will check for page_ttl for [[zh_tw]]
+ String html_uid = Xopg_lnki_list.Lnki_id_prefix + Int_.To_str(lnki.Html_uid());
+ if (vnt_enabled) {
+ Xowd_page_itm vnt_page = vnt_mgr.Convert_mgr().Convert_ttl(wiki, lnki.Ttl()); // check db
+ if (vnt_page != null) { // vnt found; update href to point to vnt
+ Xoa_ttl vnt_ttl = wiki.Ttl_parse(lnki.Ttl().Ns().Id(), vnt_page.Ttl_page_db());
+ js_wkr.Html_atr_set(html_uid, "href", "/wiki/" + String_.new_u8(vnt_ttl.Full_url()));
+ if (!String_.Eq(vnt_mgr.Html__lnki_style(), "")) js_wkr.Html_atr_set(html_uid, "style", vnt_mgr.Html__lnki_style()); // colorize for debugging
+ continue;
+ }
+ }
+
+ // lnki is missing; redlink it
+ if (usr_dlg.Canceled()) return;
+ Js_img_mgr.Update_link_missing(js_wkr, html_uid);
+ ++redlink_count;
+ }
+ usr_dlg.Log_many("", "", "redlink.redlink_end: redlinks_run=~{0}", redlink_count);
+ }
+ public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
+ if (ctx.Match(k, Invk_run)) {synchronized (this) {Redlink();}} // NOTE: attempt to eliminate random IndexBounds errors; DATE:2014-09-02
+ else return Gfo_invk_.Rv_unhandled;
+ return this;
+ } public static final String Invk_run = "run";
+ private static final int Batch_size = 32;
+}