mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
'v3.9.2.1'
This commit is contained in:
@@ -36,7 +36,7 @@ public class Xoh_img_mgr {
|
||||
Xof_fsdb_itm itm = new Xof_fsdb_itm();
|
||||
itm.Init_at_hdoc(++uid_nxt, img_is_gallery ? Xof_html_elem.Tid_gallery : Xof_html_elem.Tid_img);
|
||||
if (img_is_gallery)
|
||||
itm.Html_gallery_mgr_h_(gplx.xowa.xtns.gallery.Gallery_xnde.Default); // TODO:set to <gallery heights=val>; PAGE:en.w:National_Gallery_of_Art; DATE:2016-06-25
|
||||
itm.Html_gallery_mgr_h_(gplx.xowa.xtns.gallery.Gallery_xnde.Default); // TODO_OLD:set to <gallery heights=val>; PAGE:en.w:National_Gallery_of_Art; DATE:2016-06-25
|
||||
list.Add(itm);
|
||||
return itm;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ package gplx.xowa.htmls; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.core.primitives.*;
|
||||
import gplx.xowa.wikis.domains.*;
|
||||
public class Xoh_imgs_mgr implements Gfo_invk {
|
||||
public Xoh_imgs_mgr(Xow_html_mgr html_mgr) {wiki_is_default = html_mgr.Wiki().Domain_tid() == Xow_domain_tid_.Int__home;} private boolean wiki_is_default;
|
||||
public Xoh_imgs_mgr(Xow_html_mgr html_mgr) {wiki_is_default = html_mgr.Wiki().Domain_tid() == Xow_domain_tid_.Tid__home;} private boolean wiki_is_default;
|
||||
public Bool_obj_ref Alt_in_caption() {return alt_in_caption;} Bool_obj_ref alt_in_caption = Bool_obj_ref.y_();
|
||||
public Bool_obj_ref Alt_defaults_to_caption() {return alt_defaults_to_caption;} Bool_obj_ref alt_defaults_to_caption = Bool_obj_ref.y_();
|
||||
public void Copy_cfg(Xoh_imgs_mgr copy) {this.alt_in_caption = copy.alt_in_caption;}
|
||||
|
||||
@@ -18,8 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.htmls; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.skins.*; import gplx.xowa.wikis.pages.lnkis.*; import gplx.xowa.wikis.pages.redirects.*;
|
||||
import gplx.xowa.files.*;
|
||||
import gplx.xowa.langs.*;
|
||||
import gplx.xowa.htmls.heads.*; import gplx.xowa.htmls.sections.*; import gplx.xowa.addons.htmls.tocs.*;
|
||||
import gplx.xowa.wikis.pages.dbs.*; import gplx.xowa.wikis.pages.hdumps.*; import gplx.xowa.wikis.pages.htmls.*;
|
||||
import gplx.xowa.wikis.pages.dbs.*; import gplx.xowa.wikis.pages.hdumps.*; import gplx.xowa.wikis.pages.htmls.*; import gplx.xowa.wikis.pages.wtxts.*;
|
||||
public class Xoh_page implements Xoa_page {
|
||||
// core
|
||||
public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki;
|
||||
@@ -28,7 +29,9 @@ public class Xoh_page implements Xoa_page {
|
||||
public Xopg_db_data Db() {return db;} private final Xopg_db_data db = new Xopg_db_data();
|
||||
public Xopg_redirect_mgr Redirect_trail() {return redirect;} private final Xopg_redirect_mgr redirect = new Xopg_redirect_mgr();
|
||||
public Xopg_html_data Html_data() {return html;} private final Xopg_html_data html = new Xopg_html_data();
|
||||
public Xopg_wtxt_data Wtxt() {return wtxt;} private final Xopg_wtxt_data wtxt = new Xopg_wtxt_data();
|
||||
public Xopg_hdump_data Hdump_mgr() {return hdump;} private final Xopg_hdump_data hdump = new Xopg_hdump_data();
|
||||
public Xol_lang_itm Lang() {return lang;} private Xol_lang_itm lang;
|
||||
|
||||
public boolean Xtn__timeline_exists() {return xtn__timeline_exists;} private boolean xtn__timeline_exists; public void Xtn__timeline_exists_y_() {xtn__timeline_exists = true;}
|
||||
public boolean Xtn__gallery_exists() {return xtn__gallery_exists;} private boolean xtn__gallery_exists; public void Xtn__gallery_exists_y_() {xtn__gallery_exists = true;}
|
||||
@@ -46,15 +49,17 @@ public class Xoh_page implements Xoa_page {
|
||||
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
|
||||
public byte[] Url_bry_safe() {return page_url == null ? Bry_.Empty : page_url.To_bry(Bool_.Y, Bool_.Y);}
|
||||
public byte[] Url_bry_safe() {return Xoa_page_.Url_bry_safe(page_url, wiki, page_ttl);}
|
||||
public void Ctor_by_hview(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.lang = wiki.Lang();
|
||||
this.Clear();
|
||||
html.Redlink_list().Disabled_(page_ttl.Ns().Id_is_module()); // never redlink in Module ns; particularly since Lua has multi-line comments for [[ ]]
|
||||
html.Toc_mgr().Init(gplx.xowa.htmls.core.htmls.tidy.Xow_tidy_mgr_interface_.Noop, wiki.Lang().Msg_mgr().Itm_by_id_or_null(gplx.xowa.langs.msgs.Xol_msg_itm_.Id_toc).Val(), page_url.Raw());
|
||||
}
|
||||
public Xoh_page Ctor_by_hdiff(Bry_bfr tmp_bfr, Xoae_page page, byte[] toc_label) {
|
||||
this.wiki = page.Wiki(); this.page_url = page.Url(); this.page_ttl = page.Ttl(); this.page_id = page.Db().Page().Id();
|
||||
this.lang = wiki.Lang();
|
||||
|
||||
db.Html().Html_bry_(page.Db().Html().Html_bry());
|
||||
|
||||
@@ -78,6 +83,7 @@ public class Xoh_page implements Xoa_page {
|
||||
public void Clear() {
|
||||
redirect.Clear();
|
||||
html.Clear();
|
||||
wtxt.Clear();
|
||||
hdump.Clear();
|
||||
db.Clear();
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.skins.*;
|
||||
import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.domains.*; import gplx.xowa.parsers.*; import gplx.xowa.xtns.wbases.*;
|
||||
import gplx.xowa.xtns.pagebanners.*;
|
||||
import gplx.xowa.apps.gfs.*; import gplx.xowa.htmls.portal.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.pageboxs.*;
|
||||
public class Xoh_page_wtr_wkr {
|
||||
private final Object thread_lock_1 = new Object(), thread_lock_2 = new Object();
|
||||
private final Bry_bfr tmp_bfr = Bry_bfr_.Reset(255);
|
||||
@@ -105,7 +106,7 @@ public class Xoh_page_wtr_wkr {
|
||||
, portal_mgr.Div_ns_bry(wiki.Utl__bfr_mkr(), page_ttl, wiki.Ns_mgr())
|
||||
, portal_mgr.Div_view_bry(wiki.Utl__bfr_mkr(), html_gen_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_admin_bry(tmp_bfr, wiki, page)
|
||||
, portal_mgr.Div_sync_bry(tmp_bfr, wiki, page)
|
||||
, portal_mgr.Div_wikis_bry(wiki.Utl__bfr_mkr())
|
||||
, portal_mgr.Sidebar_mgr().Html_bry()
|
||||
, mgr.Edit_rename_div_bry(page_ttl), page.Html_data().Edit_preview_w_dbg(), js_edit_toolbar_bry
|
||||
@@ -138,7 +139,7 @@ public class Xoh_page_wtr_wkr {
|
||||
case Xow_page_tid.Tid_wikitext: Write_body_wikitext (bfr, app, wiki, data_raw, ctx, hctx, page, page_tid, page_ns_id); break;
|
||||
}
|
||||
}
|
||||
if ( wiki.Domain_tid() != Xow_domain_tid_.Int__home // allow home wiki to use javascript
|
||||
if ( wiki.Domain_tid() != Xow_domain_tid_.Tid__home // allow home wiki to use javascript
|
||||
&& !page_tid_uses_pre) { // if .js, .css or .lua, skip test; may have js fragments, but entire text is escaped and put in pre; don't show spurious warning; DATE:2013-11-21
|
||||
wiki.Html_mgr().Js_cleaner().Clean_bfr(wiki, page_ttl, bfr, bfr_page_bgn);
|
||||
}
|
||||
@@ -174,7 +175,7 @@ public class Xoh_page_wtr_wkr {
|
||||
}
|
||||
|
||||
// if [[Category]], render rest of html (Subcategories; Pages; Files); note that a category may have other html which requires wikitext processing
|
||||
if (ns_id == Xow_ns_.Tid__category) wiki.Html_mgr().Ns_ctg().Bld_html(wiki, page, hctx, tidy_bfr);
|
||||
if (ns_id == Xow_ns_.Tid__category) wiki.Html_mgr().Ns_ctg().Write_catpage(tidy_bfr, wiki, page, hctx);
|
||||
|
||||
// tidy html
|
||||
wiki.Html_mgr().Tidy_mgr().Exec_tidy(tidy_bfr, !hctx.Mode_is_hdump(), page.Url_bry_safe());
|
||||
@@ -182,18 +183,18 @@ public class Xoh_page_wtr_wkr {
|
||||
// add back to main bfr
|
||||
bfr.Add_bfr_and_clear(tidy_bfr);
|
||||
tidy_bfr.Mkr_rls();
|
||||
|
||||
// handle Categories at bottom of page; note that html is XOWA-generated so does not need to be tidied
|
||||
int ctgs_len = page.Category_list().length;
|
||||
int ctgs_len = page.Wtxt().Ctgs__len();
|
||||
if ( ctgs_enabled
|
||||
&& ctgs_len > 0
|
||||
&& ctgs_len > 0 // skip if no categories found while parsing wikitext
|
||||
&& !wiki.Html_mgr().Importing_ctgs() // do not show categories if importing categories, page will wait for category import to be done; DATE:2014-10-15
|
||||
) {
|
||||
app.Usr_dlg().Prog_many("", "", "loading categories: count=~{0}", ctgs_len);
|
||||
if (app.Ctg_mgr().Pagecats_grouping_enabled())
|
||||
app.Ctg_mgr().Pagectgs_wtr().Write(bfr, wiki, page, hctx);
|
||||
else
|
||||
wiki.Html_mgr().Ctg_mgr().Bld(bfr, page, ctgs_len);
|
||||
if (app.Mode().Tid_is_gui()) app.Usr_dlg().Prog_many("", "", "loading categories: count=~{0}", ctgs_len);
|
||||
Xoctg_pagebox_itm[] pagebox_itms = wiki.Html__ctg_pagebox_wtr().Get_catlinks_by_page(wiki, page);
|
||||
wiki.Html__ctg_pagebox_wtr().Write_pagebox(app.Ctg_mgr().Pagecats_grouping_enabled(), bfr, wiki, page, pagebox_itms);
|
||||
}
|
||||
|
||||
// translate if variants are enabled
|
||||
Xol_vnt_mgr vnt_mgr = wiki.Lang().Vnt_mgr();
|
||||
if (vnt_mgr.Enabled()) bfr.Add(vnt_mgr.Convert_lang().Parse_page(vnt_mgr.Cur_itm(), page.Db().Page().Id(), bfr.To_bry_and_clear()));
|
||||
|
||||
@@ -1,64 +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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.htmls; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.core.brys.fmtrs.*;
|
||||
import gplx.xowa.langs.*; import gplx.xowa.langs.msgs.*;
|
||||
public class Xohp_ctg_grp_mgr {
|
||||
final Bry_fmtr grp_fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last
|
||||
( "<div id=\"catlinks\" class=\"catlinks\">"
|
||||
, "<div id=\"mw-normal-catlinks\" class=\"mw-normal-catlinks\">"
|
||||
, "~{grp_lbl}"
|
||||
, "<ul>~{grp_itms}"
|
||||
, "</ul>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
), "grp_lbl", "grp_itms")
|
||||
;
|
||||
final Bry_fmtr itm_fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last
|
||||
( ""
|
||||
, "<li>"
|
||||
, "<a href=\"~{itm_href}\" class=\"internal\" title=\"~{itm_title}\">~{itm_text}</a>"
|
||||
, "</li>"
|
||||
), "itm_href", "itm_title", "itm_text"
|
||||
);
|
||||
Xoh_ctg_itm_fmtr itm_mgr = new Xoh_ctg_itm_fmtr();
|
||||
public void Bld(Bry_bfr bfr, Xoae_page page, int ctgs_len) {
|
||||
byte[] categories_lbl = page.Wikie().Msg_mgr().Val_by_id(Xol_msg_itm_.Id_ctg_tbl_hdr);
|
||||
itm_mgr.Set(page, itm_fmtr);
|
||||
grp_fmtr.Bld_bfr_many(bfr, categories_lbl, itm_mgr);
|
||||
}
|
||||
}
|
||||
class Xoh_ctg_itm_fmtr implements gplx.core.brys.Bfr_arg {
|
||||
public void Set(Xoae_page page, Bry_fmtr itm_fmtr) {this.page = page; this.itm_fmtr = itm_fmtr;} private Xoae_page page; Bry_fmtr itm_fmtr;
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
int ctgs_len = page.Category_list().length;
|
||||
Xowe_wiki wiki = page.Wikie();
|
||||
Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b128();
|
||||
Bry_bfr tmp_href = wiki.Utl__bfr_mkr().Get_b128();
|
||||
Xoae_app app = wiki.Appe();
|
||||
byte[] ctg_prefix = wiki.Ns_mgr().Ns_category().Name_db_w_colon();
|
||||
for (int i = 0; i < ctgs_len; i++) {
|
||||
byte[] page_name = page.Category_list()[i];
|
||||
tmp_bfr.Add(ctg_prefix).Add(page_name);
|
||||
wiki.Html__href_wtr().Build_to_bfr(tmp_href, app, wiki.Domain_bry(), wiki.Ttl_parse(tmp_bfr.To_bry_and_clear()));
|
||||
itm_fmtr.Bld_bfr(bfr, tmp_href.To_bry_and_clear(), page_name, page_name);
|
||||
}
|
||||
tmp_bfr.Mkr_rls();
|
||||
tmp_href.Mkr_rls();
|
||||
}
|
||||
}
|
||||
@@ -1,56 +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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.htmls; import gplx.*; import gplx.xowa.*;
|
||||
import org.junit.*;
|
||||
public class Xohp_ctg_grp_mgr_tst {
|
||||
Xoh_ctg_mgr_fxt fxt = new Xoh_ctg_mgr_fxt();
|
||||
@Before public void init() {fxt.Clear();}
|
||||
@Test public void Basic() {
|
||||
fxt.Init_ctgs("A", "B").Test_html(String_.Concat_lines_nl
|
||||
( "<div id=\"catlinks\" class=\"catlinks\">"
|
||||
, "<div id=\"mw-normal-catlinks\" class=\"mw-normal-catlinks\">"
|
||||
, "Categories"
|
||||
, "<ul>"
|
||||
, "<li>"
|
||||
, "<a href=\"/wiki/Category:A\" class=\"internal\" title=\"A\">A</a>"
|
||||
, "</li>"
|
||||
, "<li>"
|
||||
, "<a href=\"/wiki/Category:B\" class=\"internal\" title=\"B\">B</a>"
|
||||
, "</li>"
|
||||
, "</ul>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
));
|
||||
}
|
||||
}
|
||||
class Xoh_ctg_mgr_fxt {
|
||||
public Xoh_ctg_mgr_fxt Clear() {
|
||||
app = Xoa_app_fxt.Make__app__edit();
|
||||
wiki = Xoa_app_fxt.Make__wiki__edit(app);
|
||||
ctg_grp_mgr = new Xohp_ctg_grp_mgr();
|
||||
return this;
|
||||
} private Xohp_ctg_grp_mgr ctg_grp_mgr; Xoae_app app; Xowe_wiki wiki; Bry_bfr tmp_bfr = Bry_bfr_.New();
|
||||
public Xoh_ctg_mgr_fxt Init_ctgs(String... v) {init_ctgs = v; return this;} private String[] init_ctgs;
|
||||
public void Test_html(String expd) {
|
||||
byte[][] ctgs_bry_ary = Bry_.Ary(init_ctgs);
|
||||
Xoae_page page = wiki.Parser_mgr().Ctx().Page();
|
||||
page.Category_list_(ctgs_bry_ary);
|
||||
ctg_grp_mgr.Bld(tmp_bfr, page, ctgs_bry_ary.length);
|
||||
Tfds.Eq_str_lines(expd, tmp_bfr.To_str_and_clear());
|
||||
}
|
||||
}
|
||||
@@ -18,10 +18,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.htmls; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.gfui.kits.core.*;
|
||||
import gplx.xowa.langs.*;
|
||||
import gplx.xowa.wikis.ctgs.*; import gplx.xowa.xtns.gallery.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.*; import gplx.xowa.xtns.gallery.*;
|
||||
import gplx.xowa.parsers.xndes.*;
|
||||
import gplx.xowa.htmls.portal.*; import gplx.xowa.addons.htmls.tocs.*; import gplx.xowa.wikis.modules.*; import gplx.xowa.htmls.core.htmls.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.core.htmls.tidy.*; import gplx.xowa.htmls.js.*;
|
||||
import gplx.langs.htmls.encoders.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.pageboxs.*; import gplx.xowa.addons.wikis.ctgs.htmls.pageboxs.singles.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.catpages.*;
|
||||
public class Xow_html_mgr implements Gfo_invk {
|
||||
private final Gfo_url_encoder fsys_lnx_encoder = Gfo_url_encoder_.New__fsys_lnx().Make();
|
||||
public Xow_html_mgr(Xowe_wiki wiki) {
|
||||
@@ -55,8 +57,7 @@ public class Xow_html_mgr implements Gfo_invk {
|
||||
public int Img_thumb_width() {return img_thumb_width;} private int img_thumb_width = 220;
|
||||
public byte[] Img_xowa_protocol() {return img_xowa_protocol;} private byte[] img_xowa_protocol;
|
||||
public boolean Img_suppress_missing_src() {return img_suppress_missing_src;} public Xow_html_mgr Img_suppress_missing_src_(boolean v) {img_suppress_missing_src = v; return this;} private boolean img_suppress_missing_src = true;
|
||||
public Xohp_ctg_grp_mgr Ctg_mgr() {return ctg_mgr;} private Xohp_ctg_grp_mgr ctg_mgr = new Xohp_ctg_grp_mgr();
|
||||
public Xoctg_html_mgr Ns_ctg() {return ns_ctg;} private final Xoctg_html_mgr ns_ctg = new Xoctg_html_mgr();
|
||||
public Xoctg_catpage_mgr Ns_ctg() {return ns_ctg;} private final Xoctg_catpage_mgr ns_ctg = new Xoctg_catpage_mgr();
|
||||
public Xoh_imgs_mgr Imgs_mgr() {return imgs_mgr;} private Xoh_imgs_mgr imgs_mgr;
|
||||
public void Copy_cfg(Xow_html_mgr html_mgr) {imgs_mgr.Copy_cfg(html_mgr.Imgs_mgr());}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
|
||||
@@ -20,6 +20,7 @@ import gplx.core.ios.*;
|
||||
import gplx.xowa.htmls.heads.*; import gplx.xowa.htmls.core.makes.*; import gplx.xowa.htmls.core.hzips.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.skins.*; import gplx.xowa.wikis.pages.lnkis.*; import gplx.xowa.wikis.pages.htmls.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.pageboxs.*;
|
||||
public class Xow_hdump_mgr__load {
|
||||
private final Xow_wiki wiki; private final Xoh_hzip_mgr hzip_mgr; private final Io_stream_zip_mgr zip_mgr;
|
||||
private final Xoh_page tmp_hpg; private final Bry_bfr tmp_bfr; private final Xowd_page_itm tmp_dbpg = new Xowd_page_itm();
|
||||
@@ -44,7 +45,7 @@ public class Xow_hdump_mgr__load {
|
||||
this.override_mgr__html = new Xow_override_mgr(override_root_url.GenSubDir_nest("html"));
|
||||
}
|
||||
boolean loaded = Load__dbpg(wiki, tmp_dbpg.Clear(), hpg, ttl);
|
||||
hpg.Ctor_by_hview(hpg.Wiki(), hpg.Url(), ttl, tmp_dbpg.Id());
|
||||
hpg.Ctor_by_hview(wiki, hpg.Url(), ttl, tmp_dbpg.Id());
|
||||
if (!loaded) { // nothing in "page" table
|
||||
byte[] page_override = override_mgr__page.Get_or_same(ttl.Page_db(), null);
|
||||
if (page_override == null) return Load__fail(hpg);
|
||||
@@ -54,6 +55,15 @@ public class Xow_hdump_mgr__load {
|
||||
Xow_db_file html_db = wiki.Data__core_mgr().Dbs__get_by_id_or_fail(tmp_dbpg.Html_db_id());
|
||||
if (!html_db.Tbl__html().Select_by_page(hpg)) return Load__fail(hpg); // nothing in "html" table
|
||||
byte[] src = Parse(hpg, hpg.Db().Html().Zip_tid(), hpg.Db().Html().Hzip_tid(), hpg.Db().Html().Html_bry());
|
||||
|
||||
// write ctgs
|
||||
Xoctg_pagebox_itm[] pagebox_itms = wiki.Html__ctg_pagebox_wtr().Get_catlinks_by_page(wiki, hpg);
|
||||
if (pagebox_itms.length > 0) {
|
||||
tmp_bfr.Add(src);
|
||||
wiki.Html__ctg_pagebox_wtr().Write_pagebox(Bool_.Y, tmp_bfr, wiki, hpg, pagebox_itms);
|
||||
src = tmp_bfr.To_bry_and_clear();
|
||||
}
|
||||
|
||||
hpg.Db().Html().Html_bry_(src);
|
||||
return true;
|
||||
}
|
||||
@@ -73,7 +83,7 @@ public class Xow_hdump_mgr__load {
|
||||
hpg.Section_mgr().Set_content(hpg.Section_mgr().Len() - 1, src, src.length);
|
||||
break;
|
||||
case Xoh_hzip_dict_.Hzip__plain:
|
||||
gplx.xowa.apps.wms.apis.parses.Wm_page_loader page_loader = new gplx.xowa.apps.wms.apis.parses.Wm_page_loader();
|
||||
gplx.xowa.addons.wikis.pages.syncs.core.loaders.Xosync_page_loader page_loader = new gplx.xowa.addons.wikis.pages.syncs.core.loaders.Xosync_page_loader();
|
||||
src = page_loader.Parse(wiki, hpg, src);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ public class Xoh_html_wtr {
|
||||
private final Xoae_app app; private final Xowe_wiki wiki; private final Xow_html_mgr html_mgr; private final Xop_xatr_whitelist_mgr whitelist_mgr;
|
||||
private Xoae_page page;
|
||||
private int indent_level;
|
||||
private int stack_counter;
|
||||
public Xoh_html_wtr(Xowe_wiki wiki, Xow_html_mgr html_mgr) {
|
||||
this.wiki = wiki; this.app = wiki.Appe();
|
||||
this.html_mgr = html_mgr; this.whitelist_mgr = html_mgr.Whitelist_mgr();
|
||||
@@ -37,6 +38,7 @@ public class Xoh_html_wtr {
|
||||
public Xoh_hdr_html Wkr__hdr() {return wkr__hdr;} private final Xoh_hdr_html wkr__hdr = new Xoh_hdr_html();
|
||||
public Xoh_lnki_wtr Lnki_wtr() {return lnki_wtr;} private final Xoh_lnki_wtr lnki_wtr;
|
||||
public Ref_html_wtr Ref_wtr() {return ref_wtr;} private final Ref_html_wtr ref_wtr;
|
||||
|
||||
public void Init_by_wiki(Xowe_wiki wiki) {
|
||||
cfg.Toc__show_(Bool_.Y).Lnki__title_(true).Lnki_visited_y_().Lnki__id_(Bool_.Y); // NOTE: set during Init_by_wiki, b/c all tests assume these are false
|
||||
ref_wtr.Init_by_wiki(wiki);
|
||||
@@ -48,25 +50,25 @@ public class Xoh_html_wtr {
|
||||
|
||||
public void Write_doc(Bry_bfr rv, Xop_ctx ctx, byte[] src, Xop_root_tkn root) {Write_doc(rv, ctx, Xoh_wtr_ctx.Basic, src, root);}
|
||||
public void Write_doc(Bry_bfr rv, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_root_tkn root) {
|
||||
try {
|
||||
// init
|
||||
this.indent_level = 0;
|
||||
this.page = ctx.Page();
|
||||
page.Slink_list().Clear(); // HACK: always clear langs; necessary for reload
|
||||
lnki_wtr.Init_by_page(ctx, hctx, src, ctx.Page());
|
||||
|
||||
// write document starting from root
|
||||
Write_tkn(rv, ctx, hctx, src, null, -1, root);
|
||||
}
|
||||
finally {
|
||||
page.Category_list_(page.Html_data().Ctgs_to_ary());
|
||||
}
|
||||
// init
|
||||
this.indent_level = 0;
|
||||
this.stack_counter = 0;
|
||||
this.page = ctx.Page();
|
||||
page.Slink_list().Clear(); // HACK: always clear langs; necessary for reload
|
||||
lnki_wtr.Init_by_page(ctx, hctx, src, ctx.Page());
|
||||
|
||||
// write document starting from root
|
||||
Write_tkn(rv, ctx, hctx, src, null, -1, root);
|
||||
}
|
||||
public void Write_tkn_to_html(Bry_bfr bfr, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_tkn_grp grp, int sub_idx, Xop_tkn_itm tkn) {
|
||||
this.Write_tkn(bfr, ctx, hctx, src, grp, sub_idx, tkn);
|
||||
}
|
||||
private void Write_tkn(Bry_bfr bfr, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_tkn_grp grp, int sub_idx, Xop_tkn_itm tkn) {
|
||||
if (tkn.Ignore()) return;
|
||||
if (++stack_counter > 1500) { // NOTE:some deeply nested pages can go to 1500; PAGE:cs.s:Page:Hejčl,_Jan_-_Pentateuch.pdf/128 DATE:2016-09-01; PAGE:en.w:Wikipedia:People_by_year/Reports/Stats; DATE:2016-09-11
|
||||
Gfo_usr_dlg_.Instance.Warn_many("", "", "stack overflow while generating html; wiki=~{0} page=~{1}", ctx.Wiki().Domain_bry(), ctx.Page().Ttl().Full_db());
|
||||
return;
|
||||
}
|
||||
switch (tkn.Tkn_tid()) {
|
||||
case Xop_tkn_itm_.Tid_arg_itm:
|
||||
case Xop_tkn_itm_.Tid_root:
|
||||
@@ -101,6 +103,7 @@ public class Xoh_html_wtr {
|
||||
Xoh_html_wtr_escaper.Escape(app.Parser_amp_mgr(), bfr, src, tkn.Src_bgn(), tkn.Src_end(), true, false); // NOTE: always escape text including (a) lnki_alt text; and (b) any other text, especially failed xndes; DATE:2013-06-18
|
||||
break;
|
||||
}
|
||||
--stack_counter;
|
||||
}
|
||||
private void Html_ncr(Bry_bfr bfr, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_amp_tkn_num tkn) {
|
||||
bfr.Add_byte(Byte_ascii.Amp).Add_byte(Byte_ascii.Hash).Add_int_variable(tkn.Val()).Add_byte(Byte_ascii.Semic); // NOTE: do not literalize, else browser may not display multi-char bytes properly; EX:   gets added as   not as {192,160}; DATE:2013-12-09
|
||||
@@ -358,7 +361,7 @@ public class Xoh_html_wtr {
|
||||
default: // unknown tag
|
||||
if (tag.Restricted()) { // a; img; script; etc..
|
||||
if ( !page.Html_data().Html_restricted() // page is not marked restricted (only [[Special:]])
|
||||
|| page.Wiki().Domain_tid() == Xow_domain_tid_.Int__home) { // page is in home wiki
|
||||
|| page.Wiki().Domain_tid() == Xow_domain_tid_.Tid__home) { // page is in home wiki
|
||||
bfr.Add_mid(src, xnde.Src_bgn(), xnde.Src_end());
|
||||
return;
|
||||
}
|
||||
@@ -536,7 +539,7 @@ public class Xoh_html_wtr {
|
||||
}
|
||||
/*
|
||||
NOTE_1:inline always written as <tag></tag>, not <tag/>
|
||||
see WP:Permian<EFBFBD>Triassic extinction event
|
||||
see WP:Permian–Triassic extinction event
|
||||
this will cause firefox to swallow up rest of text
|
||||
<div id="ScaleBar" style="width:1px; float:left; height:38em; padding:0; background-color:#242020" />
|
||||
this will not
|
||||
|
||||
@@ -102,7 +102,7 @@ public class Xoh_img_data implements Xoh_data_itm {
|
||||
this.src_end = anch_tail.Src_end();
|
||||
if (anch_href.Site_exists()) {
|
||||
Xow_domain_itm itm = Xow_domain_itm_.parse(Bry_.Mid(src, anch_href.Site_bgn(), anch_href.Site_end()));
|
||||
anch_rel_is_nofollow = itm.Domain_type_id() == Xow_domain_tid_.Int__other;
|
||||
anch_rel_is_nofollow = itm.Domain_type_id() == Xow_domain_tid_.Tid__other;
|
||||
}
|
||||
if (img_is_vid) {
|
||||
tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__div);
|
||||
|
||||
@@ -32,7 +32,7 @@ public class Xoh_anch_cls_ {
|
||||
Bry__media_play = Bry_.new_a7("xowa_media_play")
|
||||
, Bry__media_info = Bry_.new_a7("xowa_media_info")
|
||||
, Bry__ctg_main = Bry_.new_a7("internal")
|
||||
, Bry__ctg_tree = gplx.xowa.wikis.ctgs.Xoa_ctg_mgr.Html__cls__bry
|
||||
, Bry__ctg_tree = gplx.xowa.addons.wikis.ctgs.Xoa_ctg_mgr.Html__cls__bry
|
||||
, Bry__ctg_xnav = Bry_.new_a7("xowa_nav")
|
||||
, Bry__voyage_email = Bry_.new_a7("email")
|
||||
;
|
||||
|
||||
@@ -57,7 +57,7 @@ public class Xoh_file_wtr__basic {
|
||||
int div_width = xfer_itm.Html_w();
|
||||
if (div_width < 1 && wiki.File_mgr().Version_2_y()) // NOTE: html_w is -1 for v2 and missing files; use lnki_w if available; primarily affects audio files with specified width; [[File:A.oga|30px]]; DATE:2014-05-03
|
||||
div_width = xfer_itm.Lnki_w();
|
||||
if (div_width < 1) // && hctx.Mode_is_hdump() // TODO: should manually insert?
|
||||
if (div_width < 1) // && hctx.Mode_is_hdump() // TODO_OLD: should manually insert?
|
||||
div_width = wiki.Html_mgr().Img_thumb_width();
|
||||
boolean lnki_is_thumbable = Xop_lnki_type.Id_is_thumbable(lnki.Lnki_type());
|
||||
if ( lnki_is_thumbable
|
||||
|
||||
@@ -66,7 +66,7 @@ public class Xoh_lnki_wtr {
|
||||
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]]
|
||||
case Xow_ns_.Tid__file: if (!literal_link && !stage_is_alt) {file_wtr.Write_or_queue(bfr, page, ctx, hctx, src, lnki); return;} break;
|
||||
case Xow_ns_.Tid__category: if (!literal_link) {page.Html_data().Ctgs_add(lnki.Ttl()); return;} break;
|
||||
case Xow_ns_.Tid__category: if (!literal_link) {page.Wtxt().Ctgs__add(lnki.Ttl()); return;} break;
|
||||
}
|
||||
Write_plain_by_tkn(bfr, hctx, src, lnki, lnki_ttl);
|
||||
}
|
||||
@@ -116,7 +116,7 @@ public class Xoh_lnki_wtr {
|
||||
Gfh_utl.Escape_html_to_bfr(bfr, title_bry, 0, title_len, Bool_.N, Bool_.N, Bool_.N, Bool_.Y, Bool_.N); // escape title; DATE:2014-10-27
|
||||
}
|
||||
}
|
||||
if (wiki.Domain_tid() == gplx.xowa.wikis.domains.Xow_domain_tid_.Int__other) {
|
||||
if (wiki.Domain_tid() == gplx.xowa.wikis.domains.Xow_domain_tid_.Tid__other) {
|
||||
if (lnki.Target != null) {
|
||||
bfr.Add_str_a7("\" target=\"");
|
||||
bfr.Add(lnki.Target);
|
||||
|
||||
@@ -31,7 +31,7 @@ public class Xoa_available_wikis_mgr implements Gfo_invk {
|
||||
int len = xwiki_mgr.Len();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xow_xwiki_itm itm = xwiki_mgr.Get_at(i);
|
||||
if (itm.Domain_tid() == Xow_domain_tid_.Int__home) continue;// don't show home wiki
|
||||
if (itm.Domain_tid() == Xow_domain_tid_.Tid__home) continue;// don't show home wiki
|
||||
if (!itm.Offline()) continue; // only show items marked Offline (added by Available_from_fsys); DATE:2014-09-21
|
||||
itms_as_html_fmtr.Bld_bfr_many(tmp_bfr, itm.Domain_bry(), itm_cls);
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.htmls.portal; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*;
|
||||
import gplx.core.brys.*; import gplx.core.brys.fmtrs.*;
|
||||
import gplx.xowa.langs.*; import gplx.xowa.langs.msgs.*;
|
||||
import gplx.xowa.guis.*; import gplx.xowa.htmls.sidebar.*; import gplx.xowa.wikis.pages.*;
|
||||
import gplx.xowa.guis.*; import gplx.xowa.addons.htmls.sidebars.*; import gplx.xowa.wikis.pages.*;
|
||||
import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.wikis.domains.*;
|
||||
import gplx.langs.htmls.encoders.*; import gplx.xowa.htmls.hrefs.*;
|
||||
@@ -30,14 +30,14 @@ public class Xow_portal_mgr implements Gfo_invk {
|
||||
private final Gfo_url_encoder fsys_lnx_encoder = Gfo_url_encoder_.New__fsys_lnx().Make();
|
||||
public Xow_portal_mgr(Xowe_wiki wiki) {
|
||||
this.wiki = wiki;
|
||||
this.sidebar_mgr = new Xowh_sidebar_mgr(wiki);
|
||||
this.sidebar_mgr = new Xoh_sidebar_mgr(wiki);
|
||||
this.missing_ns_cls = Bry_.Eq(wiki.Domain_bry(), Xow_domain_tid_.Bry__home) ? Missing_ns_cls_hide : null; // if home wiki, set missing_ns to application default; if any other wiki, set to null; will be overriden during init
|
||||
}
|
||||
public void Init_by_lang(Xol_lang_itm lang) {
|
||||
lang_is_rtl = !lang.Dir_ltr();
|
||||
}
|
||||
private Xoapi_skin_app_base api_skin;
|
||||
public Xowh_sidebar_mgr Sidebar_mgr() {return sidebar_mgr;} private Xowh_sidebar_mgr sidebar_mgr;
|
||||
public Xoh_sidebar_mgr Sidebar_mgr() {return sidebar_mgr;} private Xoh_sidebar_mgr sidebar_mgr;
|
||||
public Bry_fmtr Div_home_fmtr() {return div_home_fmtr;} private Bry_fmtr div_home_fmtr = Bry_fmtr.new_("");
|
||||
public Xow_portal_mgr Init_assert() {if (init_needed) Init(); return this;}
|
||||
public byte[] Div_jump_to() {return div_jump_to;} private byte[] div_jump_to = Bry_.Empty;
|
||||
@@ -60,7 +60,7 @@ public class Xow_portal_mgr implements Gfo_invk {
|
||||
Xow_msg_mgr msg_mgr = wiki.Msg_mgr();
|
||||
div_jump_to = Div_jump_to_fmtr.Bld_bry_many(tmp_bfr, msg_mgr.Val_by_key_obj("jumpto"), msg_mgr.Val_by_key_obj("jumptonavigation"), msg_mgr.Val_by_key_obj("comma-separator"), msg_mgr.Val_by_key_obj("jumptosearch"));
|
||||
tmp_bfr.Mkr_rls();
|
||||
sidebar_mgr.Init();
|
||||
sidebar_mgr.Init_by_wiki();
|
||||
} private boolean init_needed = true;
|
||||
private byte[] Init_fmtr(Bry_bfr tmp_bfr, Bry_fmtr_eval_mgr eval_mgr, Bry_fmtr fmtr, Object... fmt_args) {
|
||||
fmtr.Eval_mgr_(eval_mgr);
|
||||
@@ -106,9 +106,15 @@ public class Xow_portal_mgr implements Gfo_invk {
|
||||
} public static final byte[] Cls_selected_y = Bry_.new_a7("selected"), Cls_new = Bry_.new_a7("new"), Cls_display_none = Bry_.new_a7("xowa_display_none");
|
||||
public byte[] Div_logo_bry() {return div_logo_bry;} private byte[] div_logo_bry = Bry_.Empty;
|
||||
public byte[] Div_home_bry() {return api_skin != null && api_skin.Sidebar_home_enabled() ? div_home_bry : Bry_.Empty;} private byte[] div_home_bry = Bry_.Empty;
|
||||
public byte[] Div_admin_bry(Bry_bfr tmp_bfr, Xow_wiki wiki, Xoa_page page) {
|
||||
div_admin_fmtr.Bld_bfr_many(tmp_bfr, page.Ttl().Full_url());
|
||||
return tmp_bfr.To_bry_and_clear();
|
||||
public byte[] Div_sync_bry(Bry_bfr tmp_bfr, Xow_wiki wiki, Xoa_page page) {
|
||||
// only show update_html if wmf; DATE:2016-08-31
|
||||
switch (wiki.Domain_itm().Domain_type().Src()) {
|
||||
case Xow_domain_tid.Src__wmf:
|
||||
div_sync_fmtr.Bld_bfr_many(tmp_bfr, page.Ttl().Full_url());
|
||||
return tmp_bfr.To_bry_and_clear();
|
||||
default:
|
||||
return Bry_.Empty;
|
||||
}
|
||||
}
|
||||
public byte[] Div_wikis_bry(Bry_bfr_mkr bfr_mkr) {
|
||||
if (toggle_itm == null) // TEST:lazy-new b/c Init_by_wiki
|
||||
@@ -123,7 +129,7 @@ public class Xow_portal_mgr implements Gfo_invk {
|
||||
, div_ns_fmtr = Bry_fmtr.new_("~{portal_ns_subj_href};~{portal_ns_subj_cls};~{portal_ns_talk_href};~{portal_ns_talk_cls};~{portal_div_vnts}", "portal_ns_subj_href", "portal_ns_subj_cls", "portal_ns_talk_href", "portal_ns_talk_cls", "portal_div_vnts")
|
||||
, div_view_fmtr = Bry_fmtr.new_("", "portal_view_read_cls", "portal_view_edit_cls", "portal_view_html_cls", "search_text")
|
||||
, div_logo_fmtr = Bry_fmtr.new_("", "portal_nav_main_href", "portal_logo_url")
|
||||
, div_admin_fmtr = Bry_fmtr.new_("", "page_url")
|
||||
, div_sync_fmtr = Bry_fmtr.new_("", "page_url")
|
||||
, div_wikis_fmtr = Bry_fmtr.new_("", "toggle_btn", "toggle_hdr")
|
||||
;
|
||||
private byte[] Reverse_li(byte[] bry) {
|
||||
@@ -135,7 +141,7 @@ public class Xow_portal_mgr implements Gfo_invk {
|
||||
else if (ctx.Match(k, Invk_div_view_)) div_view_fmtr.Fmt_(Reverse_li(m.ReadBry("v")));
|
||||
else if (ctx.Match(k, Invk_div_logo_)) div_logo_fmtr.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_div_home_)) div_home_fmtr.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_div_admin_)) div_admin_fmtr.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_div_sync_)) div_sync_fmtr.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_div_wikis_)) div_wikis_fmtr.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_missing_ns_cls)) return String_.new_u8(missing_ns_cls);
|
||||
else if (ctx.Match(k, Invk_missing_ns_cls_)) missing_ns_cls = m.ReadBry("v");
|
||||
@@ -144,7 +150,7 @@ public class Xow_portal_mgr implements Gfo_invk {
|
||||
return this;
|
||||
}
|
||||
private static final String Invk_div_personal_ = "div_personal_", Invk_div_view_ = "div_view_", Invk_div_ns_ = "div_ns_", Invk_div_home_ = "div_home_"
|
||||
, Invk_div_admin_ = "div_admin_"
|
||||
, Invk_div_sync_ = "div_sync_"
|
||||
, Invk_div_wikis_ = "div_wikis_"
|
||||
, Invk_missing_ns_cls = "missing_ns_cls", Invk_missing_ns_cls_ = "missing_ns_cls_", Invk_missing_ns_cls_list = "missing_ns_cls_list"
|
||||
;
|
||||
|
||||
@@ -1,51 +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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.htmls.sidebar; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*;
|
||||
import gplx.core.brys.fmtrs.*;
|
||||
public class Xowh_sidebar_itm {
|
||||
public Xowh_sidebar_itm(byte tid) {this.tid = tid;}
|
||||
public byte Tid() {return tid;} private byte tid;
|
||||
public byte[] Id() {return id;} public Xowh_sidebar_itm Id_(byte[] v) {id = v; return this;} private byte[] id;
|
||||
public byte[] Href() {return href;} public Xowh_sidebar_itm Href_(byte[] v) {href = v; return this;} private byte[] href;
|
||||
public byte[] Title() {return title;} public Xowh_sidebar_itm Title_(byte[] v) {title = v; return this;} private byte[] title = Bry_.Empty;
|
||||
public byte[] Accesskey() {return accesskey;} public Xowh_sidebar_itm Accesskey_(byte[] v) {accesskey = v; return this;} private byte[] accesskey;
|
||||
public byte[] Atr_accesskey_and_title() {return atr_accesskey_and_title;} public Xowh_sidebar_itm Atr_accesskey_and_title_(byte[] v) {atr_accesskey_and_title = v; return this;} private byte[] atr_accesskey_and_title = Bry_.Empty;
|
||||
public byte[] Text() {return text;} public Xowh_sidebar_itm Text_(byte[] v) {text = v; return this;} private byte[] text;
|
||||
public int Itms_len() {return itms.Count();} List_adp itms = List_adp_.New();
|
||||
public Xowh_sidebar_itm Itms_get_at(int i) {return (Xowh_sidebar_itm)itms.Get_at(i);}
|
||||
public Xowh_sidebar_itm Itms_add(Xowh_sidebar_itm... ary) {
|
||||
int ary_len = ary.length;
|
||||
for (int i = 0; i < ary_len; i++)
|
||||
itms.Add(ary[i]);
|
||||
return this;
|
||||
}
|
||||
public static final byte Tid_grp = 1, Tid_itm = 2; // NOTE: values are used by parse to indicate # of asterisks
|
||||
}
|
||||
class Xowh_sidebar_grp_fmtr_arg implements gplx.core.brys.Bfr_arg {
|
||||
private Xowe_wiki wiki; private Xowh_sidebar_itm grp; private Bry_fmtr fmtr;
|
||||
public void Grp_(Xowe_wiki wiki, Xowh_sidebar_itm grp, Bry_fmtr fmtr) {this.wiki = wiki; this.grp = grp; this.fmtr = fmtr;}
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
int len = grp.Itms_len();
|
||||
boolean popups_enabled = wiki.Appe().Api_root().Html().Modules().Popups().Enabled();
|
||||
String itm_cls = popups_enabled ? " class='xowa-hover-off'" : "";
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xowh_sidebar_itm itm = (Xowh_sidebar_itm )grp.Itms_get_at(i);
|
||||
fmtr.Bld_bfr_many(bfr, itm.Id(), itm.Href(), itm_cls, itm.Atr_accesskey_and_title(), itm.Text());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,138 +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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.htmls.sidebar; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*;
|
||||
import gplx.core.btries.*; import gplx.core.brys.fmtrs.*; import gplx.langs.htmls.encoders.*;
|
||||
import gplx.xowa.langs.*; import gplx.xowa.langs.msgs.*;
|
||||
import gplx.xowa.parsers.lnkis.*;
|
||||
public class Xowh_sidebar_mgr implements Gfo_invk {
|
||||
public Xowh_sidebar_mgr(Xowe_wiki wiki) {this.wiki = wiki;} private Xowe_wiki wiki;
|
||||
public int Grps_len() {return grps.Count();} List_adp grps = List_adp_.New();
|
||||
public Xowh_sidebar_itm Grps_get_at(int i) {return (Xowh_sidebar_itm)grps.Get_at(i);}
|
||||
public byte[] Html_bry() {return html_bry;} private byte[] html_bry;
|
||||
public void Init() {
|
||||
try {
|
||||
Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512();
|
||||
Xol_msg_itm sidebar_msg = Xol_msg_mgr_.Get_msg_itm(bfr, wiki, wiki.Lang(), CONST_sidebar_ttl);
|
||||
if ( sidebar_msg.Defined_in() == Xol_msg_itm.Defined_in__none
|
||||
|| ( sidebar_msg.Defined_in() == Xol_msg_itm.Defined_in__lang
|
||||
&& wiki.Domain_tid() == gplx.xowa.wikis.domains.Xow_domain_tid_.Int__home
|
||||
)) {
|
||||
html_bry = Bry_.Empty;
|
||||
bfr.Mkr_rls();
|
||||
return;
|
||||
}
|
||||
Bry_bfr comment_bfr = wiki.Utl__bfr_mkr().Get_b512();
|
||||
Parse(bfr, comment_bfr, sidebar_msg.Val());
|
||||
Bld_html(bfr);
|
||||
html_bry = bfr.To_bry_and_rls();
|
||||
comment_bfr.Clear_and_rls();
|
||||
} catch (Exception e) {
|
||||
wiki.Appe().Usr_dlg().Warn_many(GRP_KEY, "sidebar.init", "sidebar init failed: ~{0} ~{1}", wiki.Domain_str(), Err_.Message_gplx_full(e));
|
||||
html_bry = Bry_.Empty;
|
||||
}
|
||||
}
|
||||
private static boolean Ignore(byte[] wiki, byte[] item) {
|
||||
return
|
||||
( Bry_.Eq(wiki, Ignore_wiki_ess) // occurs in 2014-02-03 dump; ignored by MW
|
||||
&& Bry_.Eq(item, Ignore_item_ess_random)
|
||||
);
|
||||
} private static byte[] Ignore_wiki_ess = Bry_.new_a7("es.wikisource.org"), Ignore_item_ess_random = Bry_.new_u8("special:Random/Página djvu");
|
||||
public void Parse(Bry_bfr bfr, Bry_bfr comment_bfr, byte[] src) {
|
||||
byte[][] lines = Bry_split_.Split(src, Byte_ascii.Nl);
|
||||
int lines_len = lines.length;
|
||||
Gfo_url_encoder id_encoder = gplx.langs.htmls.encoders.Gfo_url_encoder_.Id;
|
||||
Xowh_sidebar_itm cur_grp = null;
|
||||
Xop_link_parser link_parser = new Xop_link_parser();
|
||||
for (int i = 0; i < lines_len; i++) {
|
||||
byte[] line = lines[i]; int line_len = line.length;
|
||||
if (line_len == 0) continue; // skip blank lines
|
||||
if (line[0] != Byte_ascii.Star) continue; // skip non-list items; must begin with "*"
|
||||
byte tid = line[1] == Byte_ascii.Star ? Xowh_sidebar_itm.Tid_itm : Xowh_sidebar_itm.Tid_grp;
|
||||
byte[] bry = Bry_.Trim(line, tid, line_len); // trim *, **; note that tid indicates # of asterisks
|
||||
bry = gplx.langs.htmls.Gfh_utl.Del_comments(comment_bfr, bry); // strip comments; DATE:2014-03-08
|
||||
if (ignore_trie.Match_bgn(bry, 0, bry.length) != null) continue; // ignore SEARCH, TOOLBOX, LANGUAGES
|
||||
int pipe_pos = Bry_find_.Find_fwd(bry, Byte_ascii.Pipe);
|
||||
byte[] text_key = tid == Xowh_sidebar_itm.Tid_grp ? bry : Bry_.Mid(bry, pipe_pos + 1, bry.length); // get text_key; note that grp is entire bry, while itm is after |
|
||||
byte[] text_val = Resolve_key(text_key);
|
||||
byte[] id = id_encoder.Encode(bfr.Add(CONST_id_prefix), text_key).To_bry_and_clear(); // build id; "n-encoded_id"
|
||||
Xowh_sidebar_itm cur_itm = new Xowh_sidebar_itm(tid).Id_(id).Text_(text_val);
|
||||
wiki.Msg_mgr().Val_html_accesskey_and_title(id, bfr, cur_itm);
|
||||
if (tid == Xowh_sidebar_itm.Tid_grp) {
|
||||
cur_grp = cur_itm;
|
||||
grps.Add(cur_grp);
|
||||
}
|
||||
else {
|
||||
if (pipe_pos == Bry_find_.Not_found) { // not of format of "href|main"; (EX: "href_only")
|
||||
if (!Ignore(wiki.Domain_bry(), bry)) // suppress warning if ignored; DATE:2014-02-11
|
||||
wiki.Appe().Usr_dlg().Warn_many(GRP_KEY, "parse.line.missing_text", "sidebar item is missing pipe; only href is available; item will be hidden: item=~{0}", String_.new_u8(bry));
|
||||
continue;
|
||||
}
|
||||
byte[] href_key = Bry_.Mid(bry, 0, pipe_pos);
|
||||
byte[] href_val = Resolve_key(href_key);
|
||||
href_val = link_parser.Parse(bfr, tmp_url, wiki, href_val, Bry_.Empty);
|
||||
cur_itm.Href_(href_val);
|
||||
if (cur_grp == null) // handle null_ref; should only occur for tests
|
||||
grps.Add(cur_itm);
|
||||
else
|
||||
cur_grp.Itms_add(cur_itm);
|
||||
}
|
||||
}
|
||||
} private Xoa_url tmp_url = Xoa_url.blank();
|
||||
public void Bld_html(Bry_bfr bfr) {
|
||||
int len = grps.Count();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xowh_sidebar_itm grp = (Xowh_sidebar_itm)grps.Get_at(i);
|
||||
html_grp_fmtr_arg.Grp_(wiki, grp, html_itm_fmtr);
|
||||
html_grp_fmtr.Bld_bfr_many(bfr, grp.Id(), grp.Text(), html_grp_fmtr_arg);
|
||||
}
|
||||
} private Xowh_sidebar_grp_fmtr_arg html_grp_fmtr_arg = new Xowh_sidebar_grp_fmtr_arg();
|
||||
private Bry_fmtr html_grp_fmtr = Bry_fmtr.new_(String_.Concat_lines_nl
|
||||
( "<div class=\"portal\" id='~{grp_id}'>"
|
||||
, " <h3>~{grp_text}</h3>"
|
||||
, " <div class=\"body\">"
|
||||
, " <ul>~{itms}"
|
||||
, " </ul>"
|
||||
, " </div>"
|
||||
, "</div>")
|
||||
, "grp_id", "grp_text", "itms");
|
||||
private Bry_fmtr html_itm_fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last
|
||||
( ""
|
||||
, " <li id=\"~{itm_id}\"><a href=\"~{itm_href}\"~{itm_cls}~{itm_accesskey_and_title}>~{itm_text}</a></li>"
|
||||
), "itm_id", "itm_href", "itm_cls", "itm_accesskey_and_title", "itm_text");
|
||||
private byte[] Resolve_key(byte[] key) {
|
||||
byte[] val = wiki.Msg_mgr().Val_by_key_obj(key);
|
||||
if (Bry_.Len_eq_0(val)) val = key; // if key is not found, default to val
|
||||
return wiki.Parser_mgr().Main().Expand_tmpl(val);
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_html_grp_fmt_)) html_grp_fmtr.Fmt_(m.ReadBry("v"));
|
||||
else if (ctx.Match(k, Invk_html_itm_fmt_)) html_itm_fmtr.Fmt_(m.ReadBry("v"));
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
} private static final String Invk_html_grp_fmt_ = "html_grp_fmt_", Invk_html_itm_fmt_ = "html_itm_fmt_";
|
||||
private static final byte[] CONST_id_prefix = Bry_.new_a7("n-");
|
||||
private static final byte Ignore_tid_search = 1, Ignore_tid_toolbox = 2, Ignore_tid_toolbox_end = 3, Ignore_tid_languages = 4;
|
||||
private static final Btrie_slim_mgr ignore_trie = Btrie_slim_mgr.ci_a7()
|
||||
.Add_str_byte("SEARCH", Ignore_tid_search)
|
||||
.Add_str_byte("TOOLBOX", Ignore_tid_toolbox)
|
||||
.Add_str_byte("TOOLBOXEND", Ignore_tid_toolbox_end)
|
||||
.Add_str_byte("LANGUAGES", Ignore_tid_languages)
|
||||
;
|
||||
private static final String GRP_KEY = "xowa.wiki.gui.skin.mgr";
|
||||
private static final byte[] CONST_sidebar_ttl = Bry_.new_a7("Sidebar");
|
||||
}
|
||||
@@ -1,260 +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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.htmls.sidebar; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*;
|
||||
import org.junit.*; import gplx.core.strings.*;
|
||||
import gplx.xowa.langs.*; import gplx.xowa.langs.msgs.*;
|
||||
public class Xowh_sidebar_mgr_tst {
|
||||
@Before public void init() {fxt.Clear();} private Xowh_sidebar_mgr_fxt fxt = new Xowh_sidebar_mgr_fxt();
|
||||
@Test public void Grp() {
|
||||
fxt
|
||||
.Init_msg_grp("key", "text", "title")
|
||||
.Test_parse("* key"
|
||||
, fxt.nav_grp_("text", "title"))
|
||||
;
|
||||
}
|
||||
@Test public void Grp_missing_msg() {
|
||||
fxt
|
||||
.Test_parse("* key"
|
||||
, fxt.nav_grp_("key", Null_str))
|
||||
;
|
||||
}
|
||||
@Test public void Itm() {
|
||||
fxt
|
||||
.Init_msg_itm("href_key", "main_key", "text", "title", "accesskey", "href")
|
||||
.Test_parse
|
||||
( "** href_key|main_key"
|
||||
, fxt.nav_itm_("text", "title", "accesskey", "/wiki/Href"))
|
||||
;
|
||||
}
|
||||
@Test public void Itm_missing_msg() {
|
||||
fxt
|
||||
.Test_parse
|
||||
( "** href_key|main_key"
|
||||
, fxt.nav_itm_("main_key", Null_str, Null_str, "/wiki/Href_key")
|
||||
)
|
||||
;
|
||||
}
|
||||
@Test public void Itm_text() { // PURPOSE: only text msg exists; EX: ** Portal:Contents|contents; no href, accesskey, title
|
||||
fxt
|
||||
.Init_msg_itm("href_key", "main_key", "text", Null_str, Null_str, Null_str) // only define msg for text
|
||||
.Test_parse
|
||||
( "** href_key|main_key"
|
||||
, fxt.nav_itm_("text", Null_str, Null_str, "/wiki/Href_key"))
|
||||
;
|
||||
}
|
||||
@Test public void Itm_href_absolute() {
|
||||
fxt
|
||||
.Test_parse
|
||||
( "** http://a.org|main_key"
|
||||
, fxt.nav_itm_("main_key", Null_str, Null_str, "http://a.org"))
|
||||
;
|
||||
}
|
||||
@Test public void Itm_href_manual() {
|
||||
fxt
|
||||
.Test_parse
|
||||
( "** Help:Contents|main_key"
|
||||
, fxt.nav_itm_("main_key", Null_str, Null_str, "/wiki/Help:Contents"))
|
||||
;
|
||||
}
|
||||
@Test public void Itm_href_xwiki() {
|
||||
Xop_fxt.Reg_xwiki_alias(fxt.Wiki(), "c", "commons.wikimedia.org");
|
||||
fxt
|
||||
.Test_parse
|
||||
( "** c:Help:Contents|main_key"
|
||||
, fxt.nav_itm_("main_key", Null_str, Null_str, "/site/commons.wikimedia.org/wiki/Help:Contents"))
|
||||
;
|
||||
}
|
||||
@Test public void Itm_err_missing_key() {
|
||||
fxt
|
||||
.Test_parse
|
||||
( "** no_main_key"
|
||||
)
|
||||
;
|
||||
}
|
||||
@Test public void Itm_ignore() { // PURPOSE: ignore SEARCH, TOOLBOX, LANGUAGES
|
||||
fxt
|
||||
.Test_parse(String_.Concat_lines_nl
|
||||
( "** SEARCH"
|
||||
, "** TOOLBOX"
|
||||
, "** LANGUAGES"
|
||||
));
|
||||
}
|
||||
@Test public void Itm_comment() { // PURPOSE: ignore comment; EX:de.v:MediaWiki:Sidebar; DATE:2014-03-08
|
||||
fxt
|
||||
.Init_msg_itm("href_key", "main_key", "text", "title", "accesskey", "href")
|
||||
.Test_parse
|
||||
( "** href_key<!--a-->|main_key<!--b-->"
|
||||
, fxt.nav_itm_("text", "title", "accesskey", "/wiki/Href"))
|
||||
;
|
||||
}
|
||||
@Test public void Smoke() {
|
||||
fxt
|
||||
.Init_msg_grp("navigation", "Grp_0_text", "Grp_0_title")
|
||||
.Init_msg_itm("mainpage", "mainpage-description", "Itm_0_text", "Itm_0_title [a]", "a", "Itm_0_href")
|
||||
.Init_msg_itm("Portal:Contents", "contents", "Itm_1_text", Null_str, Null_str, Null_str)
|
||||
.Test_parse(String_.Concat_lines_nl
|
||||
( "* navigation"
|
||||
, "** mainpage|mainpage-description"
|
||||
, "** Portal:Contents|contents"
|
||||
, "* SEARCH"
|
||||
, "* interaction"
|
||||
, "** helppage|help"
|
||||
, "* TOOLBOX"
|
||||
, "** TOOLBOXEND"
|
||||
, "* LANGUAGES"
|
||||
)
|
||||
, fxt.nav_grp_("Grp_0_text", "Grp_0_title").Itms_add
|
||||
( fxt.nav_itm_("Itm_0_text", "Itm_0_title [a]", "a", "/wiki/Itm_0_href")
|
||||
, fxt.nav_itm_("Itm_1_text", Null_str, Null_str, "/wiki/Portal:Contents")
|
||||
)
|
||||
, fxt.nav_grp_("interaction", Null_str).Itms_add
|
||||
( fxt.nav_itm_("help", Null_str, Null_str, "/wiki/Helppage")
|
||||
));
|
||||
fxt.Test_html(String_.Concat_lines_nl
|
||||
( "<div class=\"portal\" id='n-navigation'>"
|
||||
, " <h3>Grp_0_text</h3>"
|
||||
, " <div class=\"body\">"
|
||||
, " <ul>"
|
||||
, " <li id=\"n-mainpage-description\"><a href=\"/wiki/Itm_0_href\" accesskey=\"a\" title=\"Itm_0_title [a] [a]\">Itm_0_text</a></li>"
|
||||
, " <li id=\"n-contents\"><a href=\"/wiki/Portal:Contents\" title=\"\">Itm_1_text</a></li>"
|
||||
, " </ul>"
|
||||
, " </div>"
|
||||
, "</div>"
|
||||
, "<div class=\"portal\" id='n-interaction'>"
|
||||
, " <h3>interaction</h3>"
|
||||
, " <div class=\"body\">"
|
||||
, " <ul>"
|
||||
, " <li id=\"n-help\"><a href=\"/wiki/Helppage\" title=\"\">help</a></li>"
|
||||
, " </ul>"
|
||||
, " </div>"
|
||||
, "</div>"
|
||||
));
|
||||
} private static final String Null_str = "";
|
||||
@Test public void Itm_template_msg() {
|
||||
fxt
|
||||
.Init_msg_itm("href", "main", null, null, null, "{{ns:Special}}:Random")
|
||||
.Test_parse(String_.Concat_lines_nl
|
||||
( "** href|main"
|
||||
)
|
||||
, fxt.nav_itm_("main", Null_str, Null_str, "/wiki/Special:Random")
|
||||
);
|
||||
}
|
||||
@Test public void Itm_template_key() {
|
||||
fxt.Test_parse(String_.Concat_lines_nl
|
||||
( "** {{ns:Special}}:Random|main"
|
||||
)
|
||||
, fxt.nav_itm_("main", Null_str, Null_str, "/wiki/Special:Random")
|
||||
);
|
||||
}
|
||||
@Test public void Popups() {
|
||||
fxt.Init_popups_enabled_(true)
|
||||
.Test_parse(String_.Concat_lines_nl
|
||||
( "* navigation"
|
||||
, "** mainpage|mainpage-description"
|
||||
)
|
||||
, fxt.nav_grp_("navigation", "").Itms_add
|
||||
( fxt.nav_itm_("mainpage-description", Null_str, Null_str, "/wiki/Mainpage")
|
||||
)
|
||||
);
|
||||
fxt.Test_html(String_.Concat_lines_nl
|
||||
( "<div class=\"portal\" id='n-navigation'>"
|
||||
, " <h3>navigation</h3>"
|
||||
, " <div class=\"body\">"
|
||||
, " <ul>"
|
||||
, " <li id=\"n-mainpage-description\"><a href=\"/wiki/Mainpage\" class='xowa-hover-off' title=\"\">mainpage-description</a></li>"
|
||||
, " </ul>"
|
||||
, " </div>"
|
||||
, "</div>"
|
||||
));
|
||||
}
|
||||
}
|
||||
class Xowh_sidebar_mgr_fxt {
|
||||
private Xoae_app app; private Xowe_wiki wiki; private Xowh_sidebar_mgr sidebar_mgr; private Bry_bfr bfr, comment_bfr;
|
||||
public Xowh_sidebar_mgr_fxt Clear() {
|
||||
// if (app == null) {
|
||||
app = Xoa_app_fxt.Make__app__edit();
|
||||
wiki = Xoa_app_fxt.Make__wiki__edit(app);
|
||||
sidebar_mgr = wiki.Html_mgr().Portal_mgr().Sidebar_mgr();
|
||||
bfr = Bry_bfr_.Reset(Io_mgr.Len_kb);
|
||||
comment_bfr = Bry_bfr_.Reset(Io_mgr.Len_kb);
|
||||
Init_popups_enabled_(false);
|
||||
// }
|
||||
return this;
|
||||
}
|
||||
public Xowe_wiki Wiki() {return wiki;}
|
||||
public Xowh_sidebar_itm nav_grp_(String text, String title, Xowh_sidebar_itm... itms) {return new Xowh_sidebar_itm(Xowh_sidebar_itm.Tid_grp).Text_(Bry_.new_a7(text)).Title_(Bry_.new_a7(title));}
|
||||
public Xowh_sidebar_itm nav_itm_(String text, String title, String accesskey, String href) {return new Xowh_sidebar_itm(Xowh_sidebar_itm.Tid_itm).Text_(Bry_.new_a7(text)).Title_(Bry_.new_a7(title)).Accesskey_(Bry_.new_a7(accesskey)).Href_(Bry_.new_a7(href));}
|
||||
public Xowh_sidebar_mgr_fxt Init_popups_enabled_(boolean v) {app.Api_root().Html().Modules().Popups().Enabled_(v); return this;}
|
||||
public Xowh_sidebar_mgr_fxt Init_msg_grp(String key, String text, String title) {
|
||||
Init_msg(key, text);
|
||||
Init_msg("tooltip-n-" + key, title);
|
||||
return this;
|
||||
}
|
||||
public Xowh_sidebar_mgr_fxt Init_msg_itm(String href_key, String main_key, String text, String title, String accesskey, String href) {
|
||||
if (text != null) Init_msg(main_key, text);
|
||||
if (href != null) Init_msg(href_key, href);
|
||||
if (title != null) Init_msg("tooltip-n-" + main_key, title);
|
||||
if (accesskey != null) Init_msg("accesskey-n-" + main_key, accesskey);
|
||||
return this;
|
||||
}
|
||||
public Xowh_sidebar_mgr_fxt Init_msg(String key, String val) {
|
||||
Xol_msg_mgr msg_mgr = wiki.Lang().Msg_mgr();
|
||||
Xol_msg_itm msg_itm = msg_mgr.Itm_by_key_or_new(Bry_.new_a7(key));
|
||||
msg_itm.Atrs_set(Bry_.new_a7(val), false, String_.Has(val, "{{"));
|
||||
return this;
|
||||
}
|
||||
public void Test_parse(String raw, Xowh_sidebar_itm... expd) {
|
||||
sidebar_mgr.Parse(bfr, comment_bfr, Bry_.new_a7(raw));
|
||||
Tfds.Eq_str_lines(Xto_str(expd), Xto_str_grps(sidebar_mgr));
|
||||
}
|
||||
public void Test_html(String expd) {
|
||||
sidebar_mgr.Bld_html(bfr);
|
||||
Tfds.Eq_str_lines(expd, bfr.To_str_and_clear());
|
||||
}
|
||||
String Xto_str_grps(Xowh_sidebar_mgr mgr) {
|
||||
int len = mgr.Grps_len();
|
||||
Xowh_sidebar_itm[] ary = new Xowh_sidebar_itm[len];
|
||||
for (int i = 0; i < len; i++)
|
||||
ary[i] = mgr.Grps_get_at(i);
|
||||
return Xto_str(ary);
|
||||
}
|
||||
|
||||
String Xto_str(Xowh_sidebar_itm[] ary) {
|
||||
int ary_len = ary.length;
|
||||
String_bldr sb = String_bldr_.new_();
|
||||
for (int i = 0; i < ary_len; i++)
|
||||
sb.Add(Xto_str(ary[i]));
|
||||
return sb.To_str_and_clear();
|
||||
}
|
||||
String Xto_str(Xowh_sidebar_itm cur) {
|
||||
String_bldr sb = String_bldr_.new_();
|
||||
boolean tid_is_itm = cur.Tid() == Xowh_sidebar_itm.Tid_itm;
|
||||
sb.Add(tid_is_itm ? "itm|" : "grp|");
|
||||
sb.Add(cur.Text()).Add("|");
|
||||
sb.Add(cur.Title()).Add("|");
|
||||
if (tid_is_itm) {
|
||||
sb.Add(cur.Accesskey()).Add("|");
|
||||
sb.Add(cur.Href()).Add("|");
|
||||
}
|
||||
sb.Add_char_nl();
|
||||
int itms_len = cur.Itms_len();
|
||||
for (int i = 0; i< itms_len; i++)
|
||||
sb.Add(Xto_str(cur.Itms_get_at(i)));
|
||||
return sb.To_str_and_clear();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user