diff --git a/100_core/src_110_primitive/gplx/Bry_.java b/100_core/src_110_primitive/gplx/Bry_.java
index 19726494a..912dd9441 100644
--- a/100_core/src_110_primitive/gplx/Bry_.java
+++ b/100_core/src_110_primitive/gplx/Bry_.java
@@ -208,6 +208,32 @@ public class Bry_ {
if (b == find) src[i] = repl;
}
}
+ public static byte[] Add_w_dlm(byte[] dlm, byte[]... ary) {
+ int ary_len = ary.length;
+ if (ary_len == 0) return Bry_.Empty;
+ int dlm_len = dlm.length;
+ int rv_len = dlm_len * (ary_len - 1); // rv will have at least as many dlms as itms - 1
+ for (int i = 0; i < ary_len; i++) {
+ byte[] itm = ary[i];
+ if (itm != null) rv_len += itm.length;
+ }
+ int rv_pos = 0;
+ byte[] rv = new byte[rv_len];
+ for (int i = 0; i < ary_len; i++) {
+ byte[] itm = ary[i];
+ if (i != 0) {
+ for (int j = 0; j < dlm_len; j++) {
+ rv[rv_pos++] = dlm[j];
+ }
+ }
+ if (itm == null) continue;
+ int itm_len = itm.length;
+ for (int j = 0; j < itm_len; j++) {
+ rv[rv_pos++] = itm[j];
+ }
+ }
+ return rv;
+ }
public static byte[] Add_w_dlm(byte dlm, byte[]... ary) {
int ary_len = ary.length;
if (ary_len == 0) return Bry_.Empty;
diff --git a/100_core/src_110_primitive/gplx/Bry__tst.java b/100_core/src_110_primitive/gplx/Bry__tst.java
index a899c7a83..0657c6a24 100644
--- a/100_core/src_110_primitive/gplx/Bry__tst.java
+++ b/100_core/src_110_primitive/gplx/Bry__tst.java
@@ -228,15 +228,6 @@ public class Bry__tst {
rv[i] = String_.new_utf8_(lines[i]);
return rv;
}
- @Test public void Add_w_dlm() {
- Tst_add_w_dlm(Byte_ascii.Pipe, String_.Ary("a", "b", "c") , "a|b|c"); // basic
- Tst_add_w_dlm(Byte_ascii.Pipe, String_.Ary("a") , "a"); // one item
- Tst_add_w_dlm(Byte_ascii.Pipe, String_.Ary("a", null, "c") , "a||c"); // null
- }
- void Tst_add_w_dlm(byte dlm, String[] itms, String expd) {
- byte[] actl = Bry_.Add_w_dlm(dlm, Bry_.Ary(itms));
- Tfds.Eq(expd, String_.new_ascii_(actl));
- }
@Test public void Match_bwd_any() {
Tst_match_bwd_any("abc", 2, 0, "c", true);
Tst_match_bwd_any("abc", 2, 0, "b", false);
@@ -268,6 +259,14 @@ public class Bry__tst {
fxt.Test_new_utf8_("€" , Bry_.ints_(226, 130, 172)); // bry_len=3; euro
fxt.Test_new_utf8_("𤭢" , Bry_.ints_(240, 164, 173, 162)); // bry_len=3; example from en.w:UTF-8
}
+ @Test public void Add_w_dlm() {
+ fxt.Test_add_w_dlm(Byte_ascii.Pipe, String_.Ary("a", "b", "c") , "a|b|c"); // basic
+ fxt.Test_add_w_dlm(Byte_ascii.Pipe, String_.Ary("a") , "a"); // one item
+ fxt.Test_add_w_dlm(Byte_ascii.Pipe, String_.Ary("a", null, "c") , "a||c"); // null
+ }
+ @Test public void Add_w_dlm_bry() {
+ fxt.Test_add_w_dlm("<>", String_.Ary("a","b","c"), "a<>b<>c");
+ }
}
class Bry__fxt {
public void Test_trim_end(String raw, byte trim, String expd) {
@@ -276,4 +275,6 @@ class Bry__fxt {
}
public void Test_new_utf8_(String raw, byte[] expd) {Tfds.Eq_ary(expd, Bry_.new_utf8_(raw));}
public void Test_new_ascii_(String raw, byte[] expd) {Tfds.Eq_ary(expd, Bry_.new_ascii_(raw));}
+ public void Test_add_w_dlm(String dlm, String[] itms, String expd) {Tfds.Eq(expd, String_.new_utf8_(Bry_.Add_w_dlm(Bry_.new_utf8_(dlm), Bry_.Ary(itms))));}
+ public void Test_add_w_dlm(byte dlm, String[] itms, String expd) {Tfds.Eq(expd, String_.new_utf8_(Bry_.Add_w_dlm(dlm, Bry_.Ary(itms))));}
}
diff --git a/100_core/src_110_primitive/gplx/Byte_ascii.java b/100_core/src_110_primitive/gplx/Byte_ascii.java
index 8b3714fda..c7724dc7e 100644
--- a/100_core/src_110_primitive/gplx/Byte_ascii.java
+++ b/100_core/src_110_primitive/gplx/Byte_ascii.java
@@ -76,6 +76,7 @@ public class Byte_ascii {
, Dot_bry = new byte[] {Byte_ascii.Dot}
, Comma_bry = new byte[] {Byte_ascii.Comma}
, Colon_bry = new byte[] {Byte_ascii.Colon}
+ , Amp_bry = new byte[] {Byte_ascii.Amp}
, Lt_bry = new byte[] {Byte_ascii.Lt}
, Gt_bry = new byte[] {Byte_ascii.Gt}
, Brack_bgn_bry = new byte[] {Byte_ascii.Brack_bgn}
diff --git a/100_core/src_200_io/gplx/Io_mgr.java b/100_core/src_200_io/gplx/Io_mgr.java
index 32448f511..88b0f4acf 100644
--- a/100_core/src_200_io/gplx/Io_mgr.java
+++ b/100_core/src_200_io/gplx/Io_mgr.java
@@ -66,7 +66,6 @@ public class Io_mgr { // exists primarily to gather all cmds under gplx namespac
}
public void AliasDir_sysEngine(String srcRoot, String trgRoot) {AliasDir(srcRoot, trgRoot, IoEngine_.SysKey);}
public void AliasDir(String srcRoot, String trgRoot, String engineKey) {IoUrlInfoRegy._.Reg(IoUrlInfo_.alias_(srcRoot, trgRoot, engineKey));}
-// public IoStream OpenStreamRead2(Io_url url) {return IoEngine_xrg_openRead.new_(url).ExecAsIoStreamOrFail();}
public IoStream OpenStreamRead(Io_url url) {return OpenStreamRead_args(url).ExecAsIoStreamOrFail();}
public IoEngine_xrg_openRead OpenStreamRead_args(Io_url url) {return IoEngine_xrg_openRead.new_(url);}
public String LoadFilStr(String url) {return LoadFilStr_args(Io_url_.new_fil_(url)).Exec();}
diff --git a/400_xowa/src/gplx/html/Html_entity_.java b/400_xowa/src/gplx/html/Html_entity_.java
index b3b883265..7a4df4f93 100644
--- a/400_xowa/src/gplx/html/Html_entity_.java
+++ b/400_xowa/src/gplx/html/Html_entity_.java
@@ -30,5 +30,6 @@ public class Html_entity_ {
, Pipe_bry = Bry_.new_ascii_("|")
, Colon_bry = Bry_.new_ascii_(":"), Underline_bry = Bry_.new_ascii_("_"), Asterisk_bry = Bry_.new_ascii_("*")
, Brack_bgn_bry = Bry_.new_ascii_("["), Brack_end_bry = Bry_.new_ascii_("]")
+ , Nbsp_bry = Bry_.new_ascii_(" ")
;
}
diff --git a/400_xowa/src/gplx/html/Html_tag_.java b/400_xowa/src/gplx/html/Html_tag_.java
index 5b416769a..5b8d7a7bb 100644
--- a/400_xowa/src/gplx/html/Html_tag_.java
+++ b/400_xowa/src/gplx/html/Html_tag_.java
@@ -20,6 +20,10 @@ public class Html_tag_ {
public static final byte[]
Ul_name_bry = Bry_.new_ascii_("ul")
, A_name_bry = Bry_.new_ascii_("a")
+ , Code_name_bry = Bry_.new_ascii_("code")
+ , Tr_name_bry = Bry_.new_ascii_("tr")
+ , Td_name_bry = Bry_.new_ascii_("td")
+ , Table_name_bry = Bry_.new_ascii_("table")
;
public static final byte[]
Br_inl = Bry_.new_ascii_("
")
diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java
index bda98ebd6..a1a77483e 100644
--- a/400_xowa/src/gplx/xowa/Xoa_app_.java
+++ b/400_xowa/src/gplx/xowa/Xoa_app_.java
@@ -24,7 +24,7 @@ public class Xoa_app_ {
boot_mgr.Run(args);
}
public static final String Name = "xowa";
- public static final String Version = "1.9.4.1";
+ public static final String Version = "1.9.5.1";
public static String Build_date = "2012-12-30 00:00:00";
public static String Op_sys;
public static String User_agent = "";
diff --git a/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__html_entity_tst.java b/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__html_entity_tst.java
index 5edfb0244..d4263b677 100644
--- a/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__html_entity_tst.java
+++ b/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__html_entity_tst.java
@@ -19,9 +19,10 @@ package gplx.xowa.apps.ttls; import gplx.*; import gplx.xowa.*; import gplx.xowa
import org.junit.*;
public class Xoa_ttl__html_entity_tst {
@Before public void init() {fxt.Reset();} private Xoa_ttl_fxt fxt = new Xoa_ttl_fxt();
- @Test public void Eacute() {fxt.Init_ttl("é").Expd_page_txt("é").Test();} //É
- @Test public void Amp_at_end() {fxt.Init_ttl("Bisc &").Expd_page_txt("Bisc &").Test();}
- @Test public void Ncr_dec() {fxt.Init_ttl("Ab").Expd_page_txt("Ab").Test();}
- @Test public void Ncr_hex() {fxt.Init_ttl("Ab").Expd_page_txt("Ab").Test();}
- @Test public void Nbsp() {fxt.Init_ttl("A b").Expd_page_txt("A b").Test();} // NOTE:   must convert to space; EX:w:United States [[Image:Dust Bowl - Dallas, South Dakota 1936.jpg|220px|alt=]]
+ @Test public void Eacute() {fxt.Init_ttl("é").Expd_page_txt("é").Test();} //É
+ @Test public void Amp_at_end() {fxt.Init_ttl("Bisc &").Expd_page_txt("Bisc &").Test();}
+ @Test public void Ncr_dec() {fxt.Init_ttl("Ab").Expd_page_txt("Ab").Test();}
+ @Test public void Ncr_hex() {fxt.Init_ttl("Ab").Expd_page_txt("Ab").Test();}
+ @Test public void Nbsp() {fxt.Init_ttl("A b").Expd_page_txt("A b").Test();} // NOTE:   must convert to space; EX:w:United States [[Image:Dust Bowl - Dallas, South Dakota 1936.jpg|220px|alt=]]
+ @Test public void Amp() {fxt.Init_ttl("A&b").Expd_page_txt("A&b").Test();} // PURPOSE: A&B -> A&B; PAGE:en.w:Amadou Bagayoko?redirect=n; DATE:2014-09-23
}
\ No newline at end of file
diff --git a/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__ws_tst.java b/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__ws_tst.java
index 79cfe1aaa..bd9ab164e 100644
--- a/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__ws_tst.java
+++ b/400_xowa/src/gplx/xowa/apps/ttls/Xoa_ttl__ws_tst.java
@@ -24,4 +24,6 @@ public class Xoa_ttl__ws_tst {
@Test public void Nl() {fxt.Init_ttl("\n\na\n\n") .Expd_page_txt("A").Test();}
@Test public void Nl_end() {fxt.Init_ttl("a\nb") .Expd_page_txt("A b").Test();}
@Test public void Tab() {fxt.Init_ttl("\ta\t") .Expd_page_txt("A").Test();}
+ @Test public void Nbsp() {fxt.Init_ttl("A bc") .Expd_page_url("A_bc").Expd_page_txt("A bc").Test();} // PURPOSE:convert " " to " "; DATE:2014-09-25
+ @Test public void Nbsp_mix() {fxt.Init_ttl("A bc") .Expd_page_url("A_bc").Expd_page_txt("A bc").Test();} // PURPOSE:convert multiple " " to " "; PAGE:en.w:Greek_government-debt_crisis; DATE:2014-09-25
}
diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_grp.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_grp.java
index e52eacd5e..250934332 100644
--- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_grp.java
+++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_grp.java
@@ -32,7 +32,7 @@ class Xoctg_fmtr_grp implements Bry_fmtr_arg {
byte[] ttl_char_0_new = gplx.intl.Utf8_.Get_char_at_pos_as_bry(itm_sortkey, 0);
byte[] grp_name = ttl_char_0_new;
if (Bry_.Eq(ttl_char_0, ttl_char_0_new)) {
- grp_name = Bry_.Add(ttl_char_0, Bry_space, wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_list_continues));
+ grp_name = Bry_.Add(ttl_char_0, Byte_ascii.Space_bry, wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_list_continues));
}
ttl_char_0 = ttl_char_0_new;
if (col_bgn_needed) {
@@ -79,5 +79,4 @@ class Xoctg_fmtr_grp implements Bry_fmtr_arg {
int col_max = ((len - 1) / cols_total) + 1; // NOTE: example is easiest explanation; EX: 4, 5, 6 should have max of 2, so (a) subtract 1; (b) divide by 3; (c) add 1
return col_idx <= ((len - 1) % cols_total) ? col_max : col_max - 1; // NOTE: example is easiest explanation; EX: 4=2,1,1; 5=2,2,1; 6=2,2,2
}
- private static final byte[] Bry_space = new byte[] {Byte_ascii.Space};
}
diff --git a/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_mgr.java b/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_mgr.java
index 57b9caf7a..7197bcbc1 100644
--- a/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_mgr.java
+++ b/400_xowa/src/gplx/xowa/gui/bnds/Xog_bnd_mgr.java
@@ -123,7 +123,7 @@ public class Xog_bnd_mgr {
Init_itm(Xog_cmd_itm_.Key_gui_page_view_mode_read , Xog_bnd_box_.Tid_browser , "mod.c+key.m,mod.c+key.r");
Init_itm(Xog_cmd_itm_.Key_gui_page_view_mode_edit , Xog_bnd_box_.Tid_browser , "mod.c+key.m,mod.c+key.e");
- Init_itm(Xog_cmd_itm_.Key_gui_page_view_mode_html , Xog_bnd_box_.Tid_browser , "mod.c+key.m,mod.c+key.h");
+ Init_itm(Xog_cmd_itm_.Key_gui_page_view_mode_html , Xog_bnd_box_.Tid_browser , "mod.c+key.m,mod.c+key.h", "mod.c+key.u");
Init_itm(Xog_cmd_itm_.Key_gui_page_view_reload , Xog_bnd_box_.Tid_browser , "mod.s+key.f5");
Init_itm(Xog_cmd_itm_.Key_gui_page_view_refresh , Xog_bnd_box_.Tid_browser , "key.f5");
Init_itm(Xog_cmd_itm_.Key_gui_page_view_save_as , Xog_bnd_box_.Tid_browser , "");
diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk_wdata_labels_tst.java b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk_wdata_labels_tst.java
index b13109582..51d1a0570 100644
--- a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk_wdata_labels_tst.java
+++ b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk_wdata_labels_tst.java
@@ -20,13 +20,13 @@ import org.junit.*; import gplx.xowa.xtns.wdatas.*;
public class Xog_html_js_cbk_wdata_labels_tst {
@Before public void init() {fxt.Init();} Wdata_wiki_mgr_fxt fxt = new Wdata_wiki_mgr_fxt();
@Test public void Basic() {
- fxt.Init_pages_add(fxt.page_bldr_("q1").Label_add("en", "en_q1").Xto_page_doc());
- fxt.Init_pages_add(fxt.page_bldr_("q2").Label_add("en", "en_q2").Xto_page_doc());
- fxt.Init_pages_add(fxt.page_bldr_("Property:P1").Label_add("en", "en_property_p1").Xto_page_doc());
+ fxt.Init_pages_add(fxt.Wdoc_bldr("q1").Add_label("en", "en_q1").Xto_wdoc());
+ fxt.Init_pages_add(fxt.Wdoc_bldr("q2").Add_label("en", "en_q2").Xto_wdoc());
+ fxt.Init_pages_add(fxt.Wdoc_bldr("Property:P1").Add_label("en", "en_property_p1").Xto_wdoc());
Tst_wikidata_label_get(String_.Ary("en", "q1", "q2", "Property:P1"), String_.Ary("en_q1", "en_q2", "en_property_p1"));
}
@Test public void Outliers() {
- fxt.Init_pages_add(fxt.page_bldr_("q1").Label_add("en", "en_q1").Label_add("de", "de_q1").Xto_page_doc());
+ fxt.Init_pages_add(fxt.Wdoc_bldr("q1").Add_label("en", "en_q1").Add_label("de", "de_q1").Xto_wdoc());
Tst_wikidata_label_get(String_.Ary("fr", "q1"), String_.Ary((String)null));
Tst_wikidata_label_get(String_.Ary("de", "q1"), String_.Ary("de_q1"));
Tst_wikidata_label_get(String_.Ary("xowa_title", "q1"), String_.Ary("q1"));
diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java
index de708f202..a7ddc2604 100644
--- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java
+++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java
@@ -51,7 +51,7 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble {
public byte[] Css_wiki_bry() {return css_wiki_bry;} public Xoh_page_wtr_mgr Css_wiki_bry_(Io_url v) {css_wiki_bry = app.Encoder_mgr().Fsys().Encode_http(v); return this;} private byte[] css_wiki_bry;
private Bry_fmtr page_read_fmtr = Bry_fmtr.new_(""
, "page_id", "page_name", "page_title", "page_content_sub", "page_jumpto", "page_data", "page_langs", "page_modified_on_msg", "page_lang_ltr"
- , "html_css_common_path", "html_css_wiki_path", "html_content_editable"
+ , "html_css_common_path", "html_css_wiki_path", "page_body_cls", "html_content_editable"
, "xowa_head"
, "portal_div_personal", "portal_div_ns", "portal_div_view"
, "portal_div_logo", "portal_div_home", "portal_div_xtn", "portal_div_wikis", "portal_sidebar"
@@ -60,7 +60,7 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble {
);
public Bry_fmtr Page_edit_fmtr() {return page_edit_fmtr;} private Bry_fmtr page_edit_fmtr = Bry_fmtr.new_(""
, "page_id", "page_name", "page_title", "page_content_sub", "page_jumpto", "page_data", "page_langs", "page_modified_on_msg", "page_lang_ltr"
- , "html_css_common_path", "html_css_wiki_path", "html_content_editable"
+ , "html_css_common_path", "html_css_wiki_path", "page_body_cls", "html_content_editable"
, "xowa_head"
, "portal_div_personal", "portal_div_ns", "portal_div_view"
, "portal_div_logo", "portal_div_home", "portal_div_xtn", "portal_div_wikis", "portal_sidebar"
@@ -69,7 +69,7 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble {
);
public Bry_fmtr Page_html_fmtr() {return page_html_fmtr;} private Bry_fmtr page_html_fmtr = Bry_fmtr.new_(""
, "page_id", "page_name", "page_title", "page_content_sub", "page_jumpto", "page_data", "page_langs", "page_modified_on_msg", "page_lang_ltr"
- , "html_css_common_path", "html_css_wiki_path", "html_content_editable"
+ , "html_css_common_path", "html_css_wiki_path", "page_body_cls", "html_content_editable"
, "xowa_head"
, "portal_div_personal", "portal_div_ns", "portal_div_view"
, "portal_div_logo", "portal_div_home", "portal_div_xtn", "portal_div_wikis", "portal_sidebar"
diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java
index f171f6176..89473720f 100644
--- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java
+++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java
@@ -58,6 +58,7 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg {
}
DateAdp page_modified_on_dte = page.Revision_data().Modified_on();
byte[] page_modified_on_msg = wiki.Msg_mgr().Val_by_id_args(Xol_msg_itm_.Id_portal_lastmodified, page_modified_on_dte.XtoStr_fmt_yyyy_MM_dd(), page_modified_on_dte.XtoStr_fmt_HHmm());
+ byte[] page_body_class = Xoh_page_body_cls.Calc(tmp_bfr, page.Ttl());
byte[] html_content_editable = wiki.Gui_mgr().Cfg_browser().Content_editable() ? Content_editable_bry : Bry_.Empty;
byte[] page_content_sub = Xoh_page_wtr_wkr_.Bld_page_content_sub(app, wiki, page, tmp_bfr);
byte[] js_wikidata_bry = Wdata_wiki_mgr.Wiki_page_is_json(wiki.Domain_tid(), page.Ttl().Ns().Id()) ? app.User().Lang().Fragment_mgr().Html_js_wikidata() : Bry_.Empty;
@@ -69,7 +70,7 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg {
, page_content_sub
, wiki.Html_mgr().Portal_mgr().Div_jump_to()
, page_data, wtr_page_lang, page_modified_on_msg, page.Lang().Dir_bry()
- , mgr.Css_common_bry(), mgr.Css_wiki_bry(), html_content_editable
+ , mgr.Css_common_bry(), mgr.Css_wiki_bry(), page_body_class, html_content_editable
, page.Html_data().Module_mgr().Init(app, wiki, page).Init_dflts()
, portal_mgr.Div_personal_bry(), portal_mgr.Div_ns_bry(app.Utl_bry_bfr_mkr(), page.Ttl(), wiki.Ns_mgr()), portal_mgr.Div_view_bry(app.Utl_bry_bfr_mkr(), view_tid, page.Html_data().Xtn_search_text())
, portal_mgr.Div_logo_bry(), portal_mgr.Div_home_bry(), new Xopg_xtn_skin_fmtr_arg(page, Xopg_xtn_skin_itm_tid.Tid_sidebar), portal_mgr.Div_wikis_bry(app.Utl_bry_bfr_mkr()), portal_mgr.Sidebar_mgr().Html_bry()
diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr__basic.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr__basic.java
index 11467a5fd..8308a1c08 100644
--- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr__basic.java
+++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr__basic.java
@@ -50,6 +50,9 @@ public class Xoh_file_wtr__basic {
byte[] img_orig_src = xfer_itm.Html_orig_src();
byte[] lnki_ttl = lnki.Ttl().Page_txt();
Xof_ext lnki_ext = xfer_itm.Lnki_ext();
+ boolean lnki_is_thumbable = Xop_lnki_type.Id_is_thumbable(lnki.Lnki_type());
+ if (lnki_is_thumbable && !xfer_itm.File_found()) // "non-found" thumbs should default to 220; otherwise large "non-found" thumbs will create large boxes; PAGE:en.w:Wikipedia:Featured_picture_candidates/September_Morn "|1000000x260px"; DATE:2014-09-24
+ div_width = Xof_img_size.Thumb_width_img;
if ( html_mgr.Img_suppress_missing_src() // option to suppress src when file is missing
&& !xfer_itm.Html_pass() // file is missing; wipe values and wait for "correct" info before regenerating; mostly to handle unknown redirects
&& !lnki_ext.Id_is_media() // file is media; never suppress; src needs to be available for "click" on play; note that most media will be missing (not downloaded)
@@ -74,7 +77,7 @@ public class Xoh_file_wtr__basic {
else if (lnki_ext.Id_is_audio()) // audio
this.Write_file_audio(bfr, ctx, src, lnki, uid, div_width, lnki_halign_bry, lnki_href, img_orig_src, img_alt);
else // image
- this.Write_file_image(bfr, ctx, hctx, src, lnki, xfer_itm, uid, div_width, lnki_halign, lnki_halign_bry, lnki_ttl, lnki_ext, lnki_href, img_view_src, img_orig_src, img_alt);
+ this.Write_file_image(bfr, ctx, hctx, src, lnki, xfer_itm, uid, lnki_is_thumbable, div_width, lnki_halign, lnki_halign_bry, lnki_ttl, lnki_ext, lnki_href, img_view_src, img_orig_src, img_alt);
}
if (hctx.Mode_is_hdump() && Xof_html_elem.Tid_is_file(xfer_itm.Html_elem_tid())) {
page.Hdump_data().Data_add_img(new Hdump_data_img__basic(), xfer_itm, Hdump_data_img__gallery.Tid_basic);
@@ -99,7 +102,7 @@ public class Xoh_file_wtr__basic {
else
bfr.Add(content);
}
- private void Write_file_image(Bry_bfr bfr, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki, Xof_xfer_itm xfer_itm, int uid, int div_width, int lnki_halign, byte[] lnki_halign_bry
+ private void Write_file_image(Bry_bfr bfr, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki, Xof_xfer_itm xfer_itm, int uid, boolean lnki_is_thumbable, int div_width, int lnki_halign, byte[] lnki_halign_bry
, byte[] lnki_ttl, Xof_ext lnki_ext, byte[] lnki_href, byte[] img_view_src, byte[] img_orig_src, byte[] alt) {
if (lnki_halign == Xop_lnki_align_h.Center) bfr.Add(Div_center_bgn);
Bry_bfr tmp_bfr = bfr_mkr.Get_k004();
@@ -107,7 +110,7 @@ public class Xoh_file_wtr__basic {
? Arg_anchor_title(tmp_bfr, src, lnki, lnki_ttl, anchor_title_wkr) // NOTE: Arg_anchor_title should only be called if there is no caption, else refs may not show; DATE:2014-03-05
: Bry_.Empty;
Xoh_file_img_wkr lnki_file_wkr = lnki.Lnki_file_wkr(); if (lnki_file_wkr == null) lnki_file_wkr = html_fmtr;
- if (Xop_lnki_type.Id_is_thumbable(lnki.Lnki_type())) { // is "thumb"
+ if (lnki_is_thumbable) { // is "thumb"
if (bfr.Len() > 0) bfr.Add_byte_nl();
byte[] content = Arg_content_thumb(lnki_file_wkr, ctx, hctx, src, lnki, xfer_itm, uid, lnki_href, img_view_src, img_orig_src, alt, lnki_ttl, anchor_title);
html_fmtr.Html_thumb_core(bfr, uid, lnki_halign_bry, div_width, content);
diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr_audio_video_tst.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr_audio_video_tst.java
index 3fbceed60..afa7fb4f0 100644
--- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr_audio_video_tst.java
+++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr_audio_video_tst.java
@@ -149,7 +149,7 @@ public class Xoh_file_wtr_audio_video_tst {
fxt.Test_parse_page_wiki_str
( "[[File:A.ogv|thumb|400px|a|alt=b]]", String_.Concat_lines_nl_skip_last
( "