diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase.java index 7b61a5231..b2e2bbfca 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase.java @@ -382,12 +382,20 @@ public function formatValues( $snaksSerialization ) { byte[] label = core.Wiki().Xtn_mgr().Xtn_wikibase().Lua_bindings().getLabelByLanguage_or_null(prefixedEntityId, languageCode); return label == null ? rslt.Init_str_empty() : rslt.Init_obj(label); } - public boolean GetSiteLinkPageName(Scrib_proc_args args, Scrib_proc_rslt rslt) { + public boolean GetSiteLinkPageName(Scrib_proc_args args, Scrib_proc_rslt rslt) { + // get wdoc from args; EX: "q2" Wdata_doc wdoc = Get_wdoc_or_null(args, core, "GetSiteLinkPageName", true); // NOTE: prop should be of form "P123"; do not add "P"; PAGE:no.w:Anne_Enger; DATE:2015-10-27 if (wdoc == null) return rslt.Init_ary_empty(); - Xow_domain_itm domain_itm = core.Wiki().Domain_itm(); - Wdata_sitelink_itm itm = wdoc.Get_slink_itm_or_null(domain_itm.Abrv_wm()); + // get wiki from args (EX: "enwiki"), or default to current wiki; ISSUE#:665; PAGE:commons.wikimedia.org/wiki/Category:Paddy_Ashdown; DATE:2020-02-19 + byte[] wiki_bry = args.Cast_bry_or_null(1); + if (wiki_bry == null) { + Xow_domain_itm domain_itm = core.Wiki().Domain_itm(); + wiki_bry = domain_itm.Abrv_wm(); + } + + // get sitelink for wiki from wdoc + Wdata_sitelink_itm itm = wdoc.Get_slink_itm_or_null(wiki_bry); return itm == null ? rslt.Init_ary_empty() : rslt.Init_many_objs(itm.Name(), itm.Lang()); } public boolean GetDescription(Scrib_proc_args args, Scrib_proc_rslt rslt) { diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/wikibases/Basic__tst.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/wikibases/Basic__tst.java index 58c6530ef..3a7d0d58d 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/wikibases/Basic__tst.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/wikibases/Basic__tst.java @@ -201,6 +201,18 @@ public class Basic__tst { @Test public void GetEntityModuleName() { fxt.Test_scrib_proc_obj(lib, Scrib_lib_wikibase.Invk_getEntityModuleName, Object_.Ary("Q123"), "mw.wikibase.entity"); } + @Test public void GetSiteLinkPageName() { + wdata_fxt.Init__docs__add(wdata_fxt.Wdoc_bldr("q2").Add_sitelink("enwiki", "Test_page").Xto_wdoc()); + fxt.Test_scrib_proc_str(lib, Scrib_lib_wikibase.Invk_getSiteLinkPageName, Object_.Ary("q2"), "Test_page"); + } + @Test public void GetSiteLinkPageName_wiki() {// ISSUE#:665; PAGE:commons.wikimedia.org/wiki/Category:Paddy_Ashdown; DATE:2020-02-19 + wdata_fxt.Init_xwikis_add("frwiki"); + wdata_fxt.Init__docs__add(wdata_fxt.Wdoc_bldr("q2") + .Add_sitelink("enwiki", "q2_enwiki") + .Add_sitelink("frwiki", "q2_frwiki") + .Xto_wdoc()); + fxt.Test_scrib_proc_str(lib, Scrib_lib_wikibase.Invk_getSiteLinkPageName, Object_.Ary("q2", "frwiki"), "q2_frwiki"); // fails if q2_enwiki + } } class Wbase_snak_utl_ { public static Keyval[] Get_snaks_ary(Wdata_wiki_mgr_fxt wdata_fxt, Wbase_claim_base... ary) {