mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v1.10.4.1
This commit is contained in:
@@ -32,13 +32,13 @@ public class Xow_lang_grp implements GfoInvkAble {
|
||||
Xow_lang_itm[] itms_ary = this.Itms();
|
||||
int itms_len = itms_ary.length;
|
||||
for (int i = 0; i < itms_len; i++)
|
||||
itms_ary[i].Atrs_set(null, false); // clear out pre-existing page names; needed b/c this struct is a singleton for entire wiki
|
||||
itms_ary[i].Atrs_set(null, false, null); // clear out pre-existing page names; needed b/c this struct is a singleton for entire wiki
|
||||
itms_active_len = 0;
|
||||
}
|
||||
public Bry_fmtr Html_all() {return html_all;} Bry_fmtr html_all; public Xow_lang_grp Html_all_(String s) {html_all = Bry_fmtr.new_(s, "all_name", "grps"); return this;}
|
||||
public byte[] Html_grp_bgn() {return html_grp_bgn;} private byte[] html_grp_bgn = Bry_.new_ascii_("\n <tr>");
|
||||
public byte[] Html_grp_end() {return html_grp_end;} private byte[] html_grp_end = Bry_.new_ascii_("\n </tr>");
|
||||
public Bry_fmtr Html_itm() {return html_itm;} Bry_fmtr html_itm; public Xow_lang_grp Html_itm_(String s) {html_itm = Bry_fmtr.new_(s, "lang_code", "lang_domain", "lang_name", "lang_href", "pagename_translation"); return this;}
|
||||
public Bry_fmtr Html_itm() {return html_itm;} Bry_fmtr html_itm; public Xow_lang_grp Html_itm_(String s) {html_itm = Bry_fmtr.new_(s, "lang_code", "lang_domain", "lang_name", "lang_href", "pagename_translation", "page_badge"); return this;}
|
||||
public void Html_bld(Bry_bfr bfr, Xow_wiki wiki) {
|
||||
Xow_lang_itm[] itms_ary = this.Itms();
|
||||
if (sort_mode == Xow_lang_grp.Sort_mode_page_name)
|
||||
@@ -62,15 +62,15 @@ public class Xow_lang_grp implements GfoInvkAble {
|
||||
Xow_lang_grp rv = new Xow_lang_grp();
|
||||
rv.lang_mgr = lang_mgr; rv.id = id; rv.key = key; rv.name = key;
|
||||
rv.Html_all_(String_.Concat_lines_nl_skip_last
|
||||
( ""
|
||||
, " <h4>~{all_name}</h4>"
|
||||
, " <table style='width: 100%;'>~{grps}"
|
||||
, " </table>"
|
||||
));
|
||||
( ""
|
||||
, " <h4>~{all_name}</h4>"
|
||||
, " <table style='width: 100%;'>~{grps}"
|
||||
, " </table>"
|
||||
));
|
||||
rv.Html_itm_(String_.Concat_lines_nl_skip_last
|
||||
( ""
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>~{lang_name}</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"~{lang_code}\" title=\"~{pagename_translation}\" href=\"~{lang_href}\">~{pagename_translation}</a></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
));
|
||||
( ""
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>~{lang_name}</td><td style='width: 20%; padding-bottom: 5px;'><li~{page_badge}><a hreflang=\"~{lang_code}\" title=\"~{pagename_translation}\" href=\"~{lang_href}\">~{pagename_translation}</a></li></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
));
|
||||
return rv;
|
||||
} private Xow_lang_grp() {}
|
||||
Xow_lang_mgr lang_mgr;
|
||||
|
||||
@@ -27,11 +27,12 @@ public class Xow_lang_itm {
|
||||
public byte[] Page_name() {return page_name;} private byte[] page_name;
|
||||
public boolean Page_name_has() {return Bry_.Len_gt_0(page_name);}
|
||||
public boolean Empty_xwiki() {return empty_xwiki;} private boolean empty_xwiki;
|
||||
public byte[][] Page_badges() {return page_badges;} private byte[][] page_badges;
|
||||
public void Html_bld(Bry_bfr bfr, Xow_wiki wiki) {
|
||||
html_grp.Html_itm().Bld_bfr(bfr, lang.Key_bry(), xwiki.Domain(), lang.Local_name_bry(), page_name);
|
||||
}
|
||||
public void Atrs_set(byte[] page_name, boolean empty_xwiki) {
|
||||
this.page_name = page_name; this.empty_xwiki = empty_xwiki;
|
||||
public void Atrs_set(byte[] page_name, boolean empty_xwiki, byte[][] page_badges) {
|
||||
this.page_name = page_name; this.empty_xwiki = empty_xwiki; this.page_badges = page_badges;
|
||||
html_grp.Itms_active_len_add_one_();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa; import gplx.*;
|
||||
import gplx.xowa.wikis.xwikis.*; import gplx.xowa.apis.xowa.html.*;
|
||||
import gplx.xowa.wikis.xwikis.*; import gplx.xowa.apis.xowa.html.*; import gplx.xowa.xtns.wdatas.core.*;
|
||||
public class Xow_lang_mgr {
|
||||
Xow_lang_mgr() {
|
||||
int len = Xol_lang_itm_.Id__max;
|
||||
@@ -67,15 +67,16 @@ public class Xow_lang_mgr {
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
return this;
|
||||
} private static final String Invk_get = "get", Invk_sort = "sort";
|
||||
public void Html_bld(Bry_bfr bfr, Xow_wiki wiki, ListAdp ttl_list, byte[] qid) {
|
||||
public void Html_bld(Bry_bfr bfr, Xow_wiki wiki, ListAdp slink_list, byte[] qid) {
|
||||
int grp_len = hash.Count();
|
||||
for (int i = 0; i < grp_len; i++) {
|
||||
Xow_lang_grp grp = (Xow_lang_grp)hash.FetchAt(i);
|
||||
grp.Itms_reset();
|
||||
}
|
||||
int ttl_list_len = ttl_list.Count();
|
||||
for (int i = 0; i < ttl_list_len; i++) {
|
||||
Xoa_ttl ttl = (Xoa_ttl)ttl_list.FetchAt(i);
|
||||
int slink_len = slink_list.Count();
|
||||
for (int i = 0; i < slink_len; i++) {
|
||||
Wdata_sitelink_itm slink = (Wdata_sitelink_itm)slink_list.FetchAt(i);
|
||||
Xoa_ttl ttl = slink.Page_ttl();
|
||||
Xow_xwiki_itm xwiki = ttl.Wik_itm();
|
||||
int lang_id = xwiki.Lang_id();
|
||||
Xow_lang_itm itm = itms[lang_id]; // NOTE: handles ttls like [[fr:]] and [[:fr;]] which have an empty Page_txt, but a valued Full_txt_raw
|
||||
@@ -85,9 +86,9 @@ public class Xow_lang_mgr {
|
||||
ttl_bry = wiki.Ctx().Cur_page().Ttl().Page_txt();
|
||||
empty_xwiki = true;
|
||||
}
|
||||
itm.Atrs_set(ttl_bry, empty_xwiki);
|
||||
itm.Atrs_set(ttl_bry, empty_xwiki, slink.Badges());
|
||||
}
|
||||
html_bldr.Init(this, wiki, ttl_list, ttl_list_len, qid);
|
||||
html_bldr.Init(this, wiki, slink_list, slink_len, qid);
|
||||
html_bldr.XferAry(bfr, -1);
|
||||
} private Xow_lang_itm[] itms = null; Xow_lang_html html_bldr = new Xow_lang_html();
|
||||
public static Xow_lang_mgr dflt_() {
|
||||
@@ -139,12 +140,13 @@ class Xow_lang_html implements Bry_fmtr_arg {
|
||||
byte[] domain = itm.Lang_domain();
|
||||
byte[] page_name = itm.Page_name();
|
||||
byte[] local_name = itm.Lang_name();
|
||||
byte[] badge_cls = Badge_cls(tmp_bfr, itm.Page_badges());
|
||||
if (wiki.App().User().Wiki().Xwiki_mgr().Get_by_key(domain) == null)
|
||||
tmp_bfr.Add(Xoh_href_parser.Href_http_bry).Add(domain).Add(Xoh_href_parser.Href_wiki_bry);
|
||||
else
|
||||
tmp_bfr.Add(Xoh_href_parser.Href_site_bry).Add(domain).Add(Xoh_href_parser.Href_wiki_bry);
|
||||
if (!itm.Empty_xwiki()) tmp_bfr.Add(page_name);
|
||||
grp.Html_itm().Bld_bfr_many(bfr, lang_key, domain, local_name, tmp_bfr.Xto_bry_and_clear(), page_name);
|
||||
grp.Html_itm().Bld_bfr_many(bfr, lang_key, domain, local_name, tmp_bfr.Xto_bry_and_clear(), page_name, badge_cls);
|
||||
++grp_counter;
|
||||
if (grp_counter == 3) {
|
||||
row_opened = false;
|
||||
@@ -160,4 +162,30 @@ class Xow_lang_html implements Bry_fmtr_arg {
|
||||
break;
|
||||
}
|
||||
} private Xow_lang_grp grp; Bry_bfr tmp_bfr = Bry_bfr.reset_(255);
|
||||
private static byte[] Badge_cls(Bry_bfr bfr, byte[][] badges) {
|
||||
if (badges == null) badges = Bry_.Ary_empty;
|
||||
int badges_len = badges.length;
|
||||
bfr.Add(Cls_bgn);
|
||||
if (badges_len == 0)
|
||||
bfr.Add(Badge_none_cls);
|
||||
else {
|
||||
for (int i = 0; i < badges_len; ++i) {
|
||||
if (i != 0) bfr.Add_byte_comma();
|
||||
byte[] badge = badges[i];
|
||||
if (Bry_.Eq(badge, Badge_good_qid)) bfr.Add(Badge_good_cls);
|
||||
else if (Bry_.Eq(badge, Badge_feat_qid)) bfr.Add(Badge_feat_cls);
|
||||
else Gfo_usr_dlg_._.Warn_many("", "", "unknown badge: badge~{0}", String_.new_utf8_(badge));
|
||||
}
|
||||
}
|
||||
bfr.Add_byte_apos();
|
||||
return bfr.Xto_bry_and_clear();
|
||||
}
|
||||
private static final byte[]
|
||||
Badge_good_qid = Bry_.new_ascii_("Q17437798")
|
||||
, Badge_good_cls = Bry_.new_ascii_("badge-goodarticle")
|
||||
, Badge_feat_qid = Bry_.new_ascii_("Q17437796")
|
||||
, Badge_feat_cls = Bry_.new_ascii_("badge-featuredarticle")
|
||||
, Badge_none_cls = Bry_.new_ascii_("badge-none")
|
||||
, Cls_bgn = Bry_.new_ascii_(" class='")
|
||||
;
|
||||
}
|
||||
@@ -59,7 +59,7 @@ public class Xow_lang_mgr_fxt {
|
||||
wiki.Html_mgr().Html_wtr().Write_all(bfr, ctx, raw_bry, root);
|
||||
|
||||
Bry_bfr html_bfr = Bry_bfr.new_();
|
||||
wiki.Xwiki_mgr().Lang_mgr().Html_bld(html_bfr, wiki, ctx.Cur_page().Xwiki_langs(), gplx.xowa.xtns.wdatas.Wdata_xwiki_link_wtr.Qid_null);
|
||||
wiki.Xwiki_mgr().Lang_mgr().Html_bld(html_bfr, wiki, ctx.Cur_page().Slink_list(), gplx.xowa.xtns.wdatas.Wdata_xwiki_link_wtr.Qid_null);
|
||||
Tfds.Eq_str_lines(expd, html_bfr.Xto_str_and_clear());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa; import gplx.*;
|
||||
import org.junit.*;
|
||||
public class Xow_lang_mgr_tst {
|
||||
Xow_lang_mgr_fxt fxt = new Xow_lang_mgr_fxt();
|
||||
private Xow_lang_mgr_fxt fxt = new Xow_lang_mgr_fxt();
|
||||
@Before public void init() {fxt.Clear();}
|
||||
@Test public void Basic() {
|
||||
fxt.tst("[[simple:Earth]] [[fr:Terre]] [[es:Tierra]] [[de:Erde]] [[it:Terre]]", String_.Concat_lines_nl_skip_last
|
||||
@@ -28,16 +28,16 @@ public class Xow_lang_mgr_tst {
|
||||
, " <h4>grp1</h4>"
|
||||
, " <table style='width: 100%;'>"
|
||||
, " <tr>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>Simple</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"simple\" title=\"Earth\" href=\"/site/simple.wikipedia.org/wiki/Earth\">Earth</a></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>Spanish</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"es\" title=\"Tierra\" href=\"/site/es.wikipedia.org/wiki/Tierra\">Tierra</a></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>Italian</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"it\" title=\"Terre\" href=\"/site/it.wikipedia.org/wiki/Terre\">Terre</a></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>Simple</td><td style='width: 20%; padding-bottom: 5px;'><li class='badge-none'><a hreflang=\"simple\" title=\"Earth\" href=\"/site/simple.wikipedia.org/wiki/Earth\">Earth</a></li></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>Spanish</td><td style='width: 20%; padding-bottom: 5px;'><li class='badge-none'><a hreflang=\"es\" title=\"Tierra\" href=\"/site/es.wikipedia.org/wiki/Tierra\">Tierra</a></li></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>Italian</td><td style='width: 20%; padding-bottom: 5px;'><li class='badge-none'><a hreflang=\"it\" title=\"Terre\" href=\"/site/it.wikipedia.org/wiki/Terre\">Terre</a></li></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " </tr>"
|
||||
, " </table>"
|
||||
, " <h4>grp2</h4>"
|
||||
, " <table style='width: 100%;'>"
|
||||
, " <tr>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>French</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"fr\" title=\"Terre\" href=\"/site/fr.wikipedia.org/wiki/Terre\">Terre</a></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>German</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"de\" title=\"Erde\" href=\"/site/de.wikipedia.org/wiki/Erde\">Erde</a></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>French</td><td style='width: 20%; padding-bottom: 5px;'><li class='badge-none'><a hreflang=\"fr\" title=\"Terre\" href=\"/site/fr.wikipedia.org/wiki/Terre\">Terre</a></li></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>German</td><td style='width: 20%; padding-bottom: 5px;'><li class='badge-none'><a hreflang=\"de\" title=\"Erde\" href=\"/site/de.wikipedia.org/wiki/Erde\">Erde</a></li></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " </tr>"
|
||||
, " </table>"
|
||||
, " </div>"
|
||||
@@ -52,7 +52,7 @@ public class Xow_lang_mgr_tst {
|
||||
, " <h4>grp1</h4>"
|
||||
, " <table style='width: 100%;'>"
|
||||
, " <tr>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>Simple</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"simple\" title=\"Test page\" href=\"/site/simple.wikipedia.org/wiki/\">Test page</a></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>Simple</td><td style='width: 20%; padding-bottom: 5px;'><li class='badge-none'><a hreflang=\"simple\" title=\"Test page\" href=\"/site/simple.wikipedia.org/wiki/\">Test page</a></li></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " </tr>"
|
||||
, " </table>"
|
||||
, " </div>"
|
||||
@@ -68,7 +68,7 @@ public class Xow_lang_mgr_tst {
|
||||
, " <h4>grp1</h4>"
|
||||
, " <table style='width: 100%;'>"
|
||||
, " <tr>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>Chinese</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"zh\" title=\"Earth\" href=\"http://zh.wikipedia.org/wiki/Earth\">Earth</a></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>Chinese</td><td style='width: 20%; padding-bottom: 5px;'><li class='badge-none'><a hreflang=\"zh\" title=\"Earth\" href=\"http://zh.wikipedia.org/wiki/Earth\">Earth</a></li></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " </tr>"
|
||||
, " </table>"
|
||||
, " </div>"
|
||||
@@ -83,7 +83,7 @@ public class Xow_lang_mgr_tst {
|
||||
, " <h4>grp1</h4>"
|
||||
, " <table style='width: 100%;'>"
|
||||
, " <tr>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>Simple</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"simple\" title=\"A#b\" href=\"/site/simple.wikipedia.org/wiki/A#b\">A#b</a></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " <td style='width: 10%; padding-bottom: 5px;'>Simple</td><td style='width: 20%; padding-bottom: 5px;'><li class='badge-none'><a hreflang=\"simple\" title=\"A#b\" href=\"/site/simple.wikipedia.org/wiki/A#b\">A#b</a></li></td><td style='width: 3%; padding-bottom: 5px;'></td>"
|
||||
, " </tr>"
|
||||
, " </table>"
|
||||
, " </div>"
|
||||
|
||||
Reference in New Issue
Block a user