ソースを参照

Pagebanner: Show pageBanner for Wikivoyage namespace [#748]

gnosygnu 4 年 前
コミット
3c9fd50ddc
1 ファイル変更105 行追加87 行削除
  1. 105 87
      400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_xtn_mgr.java

+ 105 - 87
400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_xtn_mgr.java

@@ -1,6 +1,6 @@
 /*
 XOWA: the XOWA Offline Wiki Application
-Copyright (C) 2012-2017 gnosygnu@gmail.com
+Copyright (C) 2012-2020 gnosygnu@gmail.com
 
 XOWA is licensed under the terms of the General Public License (GPL) Version 3,
 or alternatively under the terms of the Apache License Version 2.0.
@@ -13,89 +13,107 @@ The terms of each license can be found in the source code repository:
 GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
 Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
 */
-package gplx.xowa.xtns.pagebanners; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*;
-import gplx.core.brys.*; import gplx.langs.mustaches.*; import gplx.xowa.parsers.*;
-import gplx.xowa.langs.*; import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.nss.*;
-import gplx.xowa.htmls.core.htmls.*;
-public class Pgbnr_xtn_mgr extends Xox_mgr_base implements Bfr_arg {
-	@Override public byte[] Xtn_key() {return Xtn_key_static;} public static final    byte[] Xtn_key_static = Bry_.new_a7("pagebanner");
-	@Override public Xox_mgr Xtn_clone_new() {return new Pgbnr_xtn_mgr();}
-	public Pgbnr_cfg Cfg() {return cfg;} private Pgbnr_cfg cfg;
-	public Mustache_tkn_itm Template_root() {return template_root;} private Mustache_tkn_itm template_root;
-	@Override public void Xtn_init_by_app(Xoae_app app) {}
-	@Override public void Xtn_init_by_wiki(Xowe_wiki wiki) {
-		// load config; TODO_OLD: load by file
-		boolean enabled = false, enable_heading_override = true, enable_default_banner = false;
-		int[] ns_ary = Int_ary_.New(Xow_ns_.Tid__main, Xow_ns_.Tid__user);
-		int[] standard_sizes = new int[] {640, 1280, 2560};
-		int dflt_img_wdata_prop = 948; byte[] dflt_img_title = Bry_.new_a7("Pagebanner_default.jpg");	// www.wikidata.org/wiki/Property:P948
-		switch (wiki.Domain_tid()) {
-			case Xow_domain_tid_.Tid__home:
-				enabled = true;
-				ns_ary = Int_ary_.New(Xow_ns_.Tid__main);
-				break;
-			case Xow_domain_tid_.Tid__wikivoyage:
-				switch (wiki.Lang().Lang_id()) {
-					case Xol_lang_stub_.Id_en:
-					case Xol_lang_stub_.Id_fr:
-					case Xol_lang_stub_.Id_zh:
-						enabled = true;
-						break;
-					case Xol_lang_stub_.Id_ru:
-						ns_ary = Int_ary_.New(0, 1, 10, 11, 12, 13, 14, 15, 2, 2300, 2301, 2302, 2303, 2600, 3, 4, 5, 6, 7, 8, 828, 829, 9);
-						enabled = true;
-						break;
-					case Xol_lang_stub_.Id_uk:
-						ns_ary = Int_ary_.New(Xow_ns_.Tid__main, Xow_ns_.Tid__user, Xow_ns_.Tid__project);
-						enabled = true;
-						break;
-				}
-				break;
-			case Xow_domain_tid_.Tid__wikipedia:
-				switch (wiki.Lang().Lang_id()) {
-					case Xol_lang_stub_.Id_ca:
-						// enabled = enable_default_banner = true;
-						ns_ary = Int_ary_.New(102, Xow_ns_.Tid__user);
-						break;
-					 case Xol_lang_stub_.Id_en:
-						// enabled = enable_default_banner = true;
-						enable_heading_override = false;
-						break;
-				}
-				break;
-		}
-		cfg = new Pgbnr_cfg(enabled, enable_heading_override, enable_default_banner, ns_ary, dflt_img_wdata_prop, dflt_img_title, standard_sizes);
-
-		if (!enabled) return;
-		// load template file;
-		byte[] template_data = Io_mgr.Instance.LoadFilBryOr(wiki.Appe().Fsys_mgr().Bin_any_dir().GenSubDir_nest("xowa", "xtns", "WikidataPageBanner", "templates", "banner.mustache"), Template_dflt);
-		Mustache_tkn_parser parser = new Mustache_tkn_parser();
-		template_root = parser.Parse(template_data, 0, template_data.length);
-	}
-	public Bfr_arg Write_html(Xoae_page wpg, Xop_ctx pctx, Xoh_wtr_ctx hctx) {
-		this.wpg = wpg; this.pctx = pctx; this.hctx = hctx;
-		return this;
-	}	private Xoae_page wpg; private Xop_ctx pctx; private Xoh_wtr_ctx hctx;
-	public void Bfr_arg__add(Bry_bfr bfr) {
-		Pgbnr_itm itm = wpg.Html_data().Xtn_pgbnr(); if (itm == null) return;
-		Pgbnr_func.Add_banner(bfr, wpg, pctx, hctx, itm);
-	}
-
-	public static final    byte[] Bry__cls__wpb_banner_image = Bry_.new_a7("wpb-banner-image");
-	private static final    byte[] Template_dflt = Bry_.New_u8_nl_apos
-	( "<div class='ext-wpb-pagebanner pre-content'>"
-	, " <div class=\"{{#isPanorama}}wpb-banner-image-panorama {{/isPanorama}}wpb-topbanner{{extraClass}}\">"
-	, "		{{#isHeadingOverrideEnabled}}<h1 class='wpb-name'>{{title}}</h1>{{/isHeadingOverrideEnabled}}"
-	, "		<a href='{{bannerfile}}' class='image' title='{{tooltip}}' xowa_title='{{file_ttl}}'><img{{{img_id_atr}}}{{{img_xottl}}}{{{img_xoimg}}} src='{{banner}}' width='0' height='0' class='wpb-banner-image {{originx}}' alt='' srcset='{{srcset}}' data-pos-x='{{data-pos-x}}' data-pos-y='{{data-pos-y}}' style='max-width:{{maxWidth}}px'></a>"
-	, "		{{#hasIcons}}"
-	, "		<div class='wpb-iconbox'>"
-	, "			{{#icons}}"
-	, "				<a href='{{url}}'>{{{html}}}</a>"
-	, "			{{/icons}}"
-	, "		</div>"
-	, "		{{/hasIcons}}"
-	, "	</div>"
-	, "	<div class='wpb-topbanner-toc{{#bottomtoc}} wpb-bottomtoc{{/bottomtoc}}'><div class='wpb-banner-toc'>{{{toc}}}</div></div>"
-	, "</div>"
-	);
-}
+package gplx.xowa.xtns.pagebanners;
+
+import gplx.Bry_;
+import gplx.Bry_bfr;
+import gplx.Int_ary_;
+import gplx.Io_mgr;
+import gplx.core.brys.Bfr_arg;
+import gplx.langs.mustaches.Mustache_tkn_itm;
+import gplx.langs.mustaches.Mustache_tkn_parser;
+import gplx.xowa.Xoae_app;
+import gplx.xowa.Xoae_page;
+import gplx.xowa.Xowe_wiki;
+import gplx.xowa.htmls.core.htmls.Xoh_wtr_ctx;
+import gplx.xowa.langs.Xol_lang_stub_;
+import gplx.xowa.parsers.Xop_ctx;
+import gplx.xowa.wikis.domains.Xow_domain_tid_;
+import gplx.xowa.wikis.nss.Xow_ns_;
+import gplx.xowa.xtns.Xox_mgr;
+import gplx.xowa.xtns.Xox_mgr_base;
+
+public class Pgbnr_xtn_mgr extends Xox_mgr_base implements Bfr_arg {
+	@Override public byte[] Xtn_key() {return Xtn_key_static;} public static final    byte[] Xtn_key_static = Bry_.new_a7("pagebanner");
+	@Override public Xox_mgr Xtn_clone_new() {return new Pgbnr_xtn_mgr();}
+	public Pgbnr_cfg Cfg() {return cfg;} private Pgbnr_cfg cfg;
+	public Mustache_tkn_itm Template_root() {return template_root;} private Mustache_tkn_itm template_root;
+	@Override public void Xtn_init_by_app(Xoae_app app) {}
+	@Override public void Xtn_init_by_wiki(Xowe_wiki wiki) {
+		// load config; TODO_OLD: load by file
+		boolean enabled = false, enable_heading_override = true, enable_default_banner = false;
+		int[] ns_ary = Int_ary_.New(Xow_ns_.Tid__main, Xow_ns_.Tid__user, Xow_ns_.Tid__main); // default list; overriden by home/ wikivoyage below
+		int[] standard_sizes = new int[] {640, 1280, 2560};
+		int dflt_img_wdata_prop = 948; byte[] dflt_img_title = Bry_.new_a7("Pagebanner_default.jpg");	// www.wikidata.org/wiki/Property:P948
+		switch (wiki.Domain_tid()) {
+			case Xow_domain_tid_.Tid__home:
+				ns_ary = Int_ary_.New(Xow_ns_.Tid__main);
+				enabled = true;
+				break;
+			case Xow_domain_tid_.Tid__wikivoyage:
+				// 2020-08-16|#748:include project for en.v; PAGE:en.v:Wikivoyage:Past_events/World_Cup_2010
+				ns_ary = Int_ary_.New(Xow_ns_.Tid__main, Xow_ns_.Tid__user, Xow_ns_.Tid__main, Xow_ns_.Tid__project);
+				switch (wiki.Lang().Lang_id()) {
+					case Xol_lang_stub_.Id_en:
+					case Xol_lang_stub_.Id_fr:
+					case Xol_lang_stub_.Id_zh:
+						enabled = true;
+						break;
+					case Xol_lang_stub_.Id_ru:
+						ns_ary = Int_ary_.New(0, 1, 10, 11, 12, 13, 14, 15, 2, 2300, 2301, 2302, 2303, 2600, 3, 4, 5, 6, 7, 8, 828, 829, 9);
+						enabled = true;
+						break;
+					case Xol_lang_stub_.Id_uk:
+						ns_ary = Int_ary_.New(Xow_ns_.Tid__main, Xow_ns_.Tid__user, Xow_ns_.Tid__project);
+						enabled = true;
+						break;
+				}
+				break;
+			case Xow_domain_tid_.Tid__wikipedia:
+				switch (wiki.Lang().Lang_id()) {
+					case Xol_lang_stub_.Id_ca:
+						// enabled = enable_default_banner = true;
+						ns_ary = Int_ary_.New(102, Xow_ns_.Tid__user);
+						break;
+					 case Xol_lang_stub_.Id_en:
+						// enabled = enable_default_banner = true;
+						enable_heading_override = false;
+						break;
+				}
+				break;
+		}
+		cfg = new Pgbnr_cfg(enabled, enable_heading_override, enable_default_banner, ns_ary, dflt_img_wdata_prop, dflt_img_title, standard_sizes);
+
+		if (!enabled) return;
+		// load template file;
+		byte[] template_data = Io_mgr.Instance.LoadFilBryOr(wiki.Appe().Fsys_mgr().Bin_any_dir().GenSubDir_nest("xowa", "xtns", "WikidataPageBanner", "templates", "banner.mustache"), Template_dflt);
+		Mustache_tkn_parser parser = new Mustache_tkn_parser();
+		template_root = parser.Parse(template_data, 0, template_data.length);
+	}
+	public Bfr_arg Write_html(Xoae_page wpg, Xop_ctx pctx, Xoh_wtr_ctx hctx) {
+		this.wpg = wpg; this.pctx = pctx; this.hctx = hctx;
+		return this;
+	}	private Xoae_page wpg; private Xop_ctx pctx; private Xoh_wtr_ctx hctx;
+	public void Bfr_arg__add(Bry_bfr bfr) {
+		Pgbnr_itm itm = wpg.Html_data().Xtn_pgbnr(); if (itm == null) return;
+		Pgbnr_func.Add_banner(bfr, wpg, pctx, hctx, itm);
+	}
+
+	public static final    byte[] Bry__cls__wpb_banner_image = Bry_.new_a7("wpb-banner-image");
+	private static final    byte[] Template_dflt = Bry_.New_u8_nl_apos
+	( "<div class='ext-wpb-pagebanner pre-content'>"
+	, " <div class=\"{{#isPanorama}}wpb-banner-image-panorama {{/isPanorama}}wpb-topbanner{{extraClass}}\">"
+	, "		{{#isHeadingOverrideEnabled}}<h1 class='wpb-name'>{{title}}</h1>{{/isHeadingOverrideEnabled}}"
+	, "		<a href='{{bannerfile}}' class='image' title='{{tooltip}}' xowa_title='{{file_ttl}}'><img{{{img_id_atr}}}{{{img_xottl}}}{{{img_xoimg}}} src='{{banner}}' width='0' height='0' class='wpb-banner-image {{originx}}' alt='' srcset='{{srcset}}' data-pos-x='{{data-pos-x}}' data-pos-y='{{data-pos-y}}' style='max-width:{{maxWidth}}px'></a>"
+	, "		{{#hasIcons}}"
+	, "		<div class='wpb-iconbox'>"
+	, "			{{#icons}}"
+	, "				<a href='{{url}}'>{{{html}}}</a>"
+	, "			{{/icons}}"
+	, "		</div>"
+	, "		{{/hasIcons}}"
+	, "	</div>"
+	, "	<div class='wpb-topbanner-toc{{#bottomtoc}} wpb-bottomtoc{{/bottomtoc}}'><div class='wpb-banner-toc'>{{{toc}}}</div></div>"
+	, "</div>"
+	);
+}