1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00

Gui: Add option to display actual HTML in SWT browser

This commit is contained in:
gnosygnu
2017-03-22 15:53:43 -04:00
parent a9afa7a827
commit 4360e42e95
10 changed files with 99 additions and 22 deletions

View File

@@ -0,0 +1,19 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2017 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.
You may use XOWA according to either of these licenses as is most appropriate
for your project on a case-by-case basis.
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.htmls; import gplx.*; import gplx.xowa.*;
public interface Xoh_page_html_source {
byte[] Get_page_html();
}

View File

@@ -0,0 +1,28 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2017 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.
You may use XOWA according to either of these licenses as is most appropriate
for your project on a case-by-case basis.
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.htmls; import gplx.*; import gplx.xowa.*;
public class Xoh_page_html_source_ {
public static Xoh_page_html_source
Wtr = new Xoh_page_html_source__wtr()
, Noop = new Xoh_page_html_source__noop()
;
}
class Xoh_page_html_source__wtr implements Xoh_page_html_source {
public byte[] Get_page_html() {return null;}
}
class Xoh_page_html_source__noop implements Xoh_page_html_source {
public byte[] Get_page_html() {return null;}
}

View File

@@ -53,7 +53,8 @@ public class Xoh_page_wtr_mgr implements Gfo_invk {
public void Init_by_wiki(Xow_wiki wiki) {
wiki.App().Cfg().Bind_many_wiki(this, wiki, Cfg__scripting_enabled);
}
public byte[] Gen(Xoae_page page, byte output_tid) {
public byte[] Gen(Xoae_page page, byte output_tid) {return Gen(page, Xoh_page_html_source_.Noop, output_tid);}
public byte[] Gen(Xoae_page page, Xoh_page_html_source page_html_source, byte output_tid) {
Xoh_page_wtr_wkr wtr = Wkr(output_tid);
Xowe_wiki wiki = page.Wikie();
if (init) {
@@ -62,7 +63,7 @@ public class Xoh_page_wtr_mgr implements Gfo_invk {
page_edit_fmtr.Eval_mgr_(wiki.Eval_mgr());
page_html_fmtr.Eval_mgr_(wiki.Eval_mgr());
}
wtr.Write_page(html_bfr, page, wiki.Parser_mgr().Ctx());
wtr.Write_page(html_bfr, page, wiki.Parser_mgr().Ctx(), page_html_source);
return html_bfr.To_bry_and_clear_and_rls();
}
public Xoh_page_wtr_wkr Wkr(byte output_tid) {

View File

@@ -21,6 +21,7 @@ import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.d
import gplx.xowa.xtns.pagebanners.*;
import gplx.xowa.apps.gfs.*; import gplx.xowa.htmls.portal.*;
import gplx.xowa.addons.wikis.ctgs.htmls.pageboxs.*;
import gplx.xowa.htmls.core.*;
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);
@@ -30,7 +31,7 @@ public class Xoh_page_wtr_wkr {
private Xoae_app app; private Xowe_wiki wiki; private Xoae_page page; private byte[] root_dir_bry;
public Xoh_page_wtr_wkr(Xoh_page_wtr_mgr mgr, byte page_mode) {this.mgr = mgr; this.page_mode = page_mode;}
public Xoh_page_wtr_wkr Ctgs_enabled_(boolean v) {ctgs_enabled = v; return this;} private boolean ctgs_enabled = true;
public void Write_page(Bry_bfr rv, Xoae_page page, Xop_ctx ctx) {
public void Write_page(Bry_bfr rv, Xoae_page page, Xop_ctx ctx, Xoh_page_html_source page_html_source) {
synchronized (thread_lock_1) {
this.page = page; this.wiki = page.Wikie(); this.app = wiki.Appe();
ctx.Page_(page); // HACK: must update page for toc_mgr; WHEN: Xoae_page rewrite
@@ -47,10 +48,20 @@ public class Xoh_page_wtr_wkr {
}
Bry_bfr page_bfr = wiki.Utl__bfr_mkr().Get_m001(); // NOTE: get separate page rv to output page; do not reuse tmp_bfr b/c it will be used inside Fmt_do
Xoh_wtr_ctx hctx = null;
if (page_mode == Xopg_page_.Tid_html && wiki.Html__hdump_mgr().Load_mgr().Html_mode().Tid_is_hdump_save()) {
hctx = Xoh_wtr_ctx.Hdump;
Write_body(page_bfr, ctx, hctx, page);
Write_page_by_tid(ctx, hctx, page_mode, rv, mgr.Page_html_fmtr(), Gfh_utl.Escape_html_as_bry(page_bfr.To_bry_and_clear()));
if (page_mode == Xopg_page_.Tid_html && wiki.Html__hdump_mgr().Load_mgr().Html_mode().Tid_is_custom()) {
byte[] html_bry = null;
// get html from html dump
if (wiki.Html__hdump_mgr().Load_mgr().Html_mode().Tid() == Xow_hdump_mode.Hdump_save.Tid()) {
hctx = Xoh_wtr_ctx.Hdump;
Write_body(page_bfr, ctx, hctx, page);
html_bry = page_bfr.To_bry_and_clear();
}
// get from swt browser
else {
html_bry = page_html_source.Get_page_html();
}
Write_page_by_tid(ctx, hctx, page_mode, rv, mgr.Page_html_fmtr(), Gfh_utl.Escape_html_as_bry(html_bry));
}
else {
hctx = Xoh_wtr_ctx.Basic;

View File

@@ -22,20 +22,25 @@ public class Xow_hdump_mode {
public Xow_hdump_mode(int tid, String key, String gui) {
this.tid = tid; this.key = key; this.gui = gui;
}
public boolean Tid_is_hdump_save() {return tid == Hdump_save.tid;}
public int Tid() {return tid;}
// boolean Tid_is_hdump_save() {return tid == Hdump_save.tid;}
public boolean Tid_is_custom() {return tid < Shown.tid;}
public static final Xow_hdump_mode
Shown = new Xow_hdump_mode(0, "shown" , "Shown")
, Hdump_save = new Xow_hdump_mode(1, "hdump_save" , "Saved for HTML DB")
, Hdump_load = new Xow_hdump_mode(2, "hdump_load" , "Loaded by HTML DB");
Swt_browser = new Xow_hdump_mode(0, "swt_browser" , "SWT Browser")
, Hdump_save = new Xow_hdump_mode(1, "hdump_save" , "Saved for HTML DB")
, Shown = new Xow_hdump_mode(2, "shown" , "Shown")
, Hdump_load = new Xow_hdump_mode(3, "hdump_load" , "Loaded by HTML DB")
;
public static void Cfg__reg_type(gplx.xowa.addons.apps.cfgs.mgrs.types.Xocfg_type_mgr type_mgr) {
type_mgr.Lists__add("list:xowa.wiki.hdumps.html_mode", To_kv(Shown), To_kv(Hdump_save), To_kv(Hdump_load));
type_mgr.Lists__add("list:xowa.wiki.hdumps.html_mode", To_kv(Shown), To_kv(Swt_browser), To_kv(Hdump_save), To_kv(Hdump_load));
}
private static Keyval To_kv(Xow_hdump_mode mode) {return Keyval_.new_(mode.key, mode.gui);}
public static Xow_hdump_mode Parse(String v) {
if (String_.Eq(v, Shown.key)) return Shown;
else if (String_.Eq(v, Hdump_save.key)) return Hdump_save;
else if (String_.Eq(v, Hdump_load.key)) return Hdump_load;
else if (String_.Eq(v, Swt_browser.key)) return Swt_browser;
else throw Err_.new_unhandled(v);
}
}