1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2024-10-27 20:34:16 +00:00

Gui: Strip about: from links [#799]

This commit is contained in:
gnosygnu 2020-09-19 12:47:56 -04:00
parent de841f8ff2
commit caad4145d5

View File

@ -1,6 +1,6 @@
/* /*
XOWA: the XOWA Offline Wiki Application 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, 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. or alternatively under the terms of the Apache License Version 2.0.
@ -13,10 +13,31 @@ 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 GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/ */
package gplx.gfui.kits.swts; import gplx.*; import gplx.gfui.*; import gplx.gfui.kits.*; package gplx.gfui.kits.swts;
import gplx.Bool_;
import gplx.Bry_bfr;
import gplx.Bry_bfr_;
import gplx.Byte_ascii;
import gplx.Err_;
import gplx.GfoMsg;
import gplx.Gfo_evt_itm;
import gplx.Gfo_evt_mgr;
import gplx.Gfo_evt_mgr_;
import gplx.Gfo_evt_mgr_owner;
import gplx.Gfo_invk;
import gplx.Gfo_invk_;
import gplx.GfsCtx;
import gplx.Int_;
import gplx.Io_mgr;
import gplx.Io_url;
import gplx.Keyval_hash;
import gplx.Long_;
import gplx.Object_;
import gplx.String_;
import gplx.Type_;
import gplx.UsrDlg_;
import gplx.core.envs.System_; import gplx.core.envs.System_;
import gplx.core.primitives.*;
import gplx.core.threads.Thread_adp_;
import gplx.gfui.controls.elems.GfuiElem; import gplx.gfui.controls.elems.GfuiElem;
import gplx.gfui.controls.gxws.GxwCbkHost; import gplx.gfui.controls.gxws.GxwCbkHost;
import gplx.gfui.controls.gxws.GxwCore_base; import gplx.gfui.controls.gxws.GxwCore_base;
@ -24,27 +45,32 @@ import gplx.gfui.controls.gxws.GxwElem;
import gplx.gfui.controls.gxws.Gxw_html; import gplx.gfui.controls.gxws.Gxw_html;
import gplx.gfui.controls.gxws.Gxw_html_load_tid_; import gplx.gfui.controls.gxws.Gxw_html_load_tid_;
import gplx.gfui.controls.standards.Gfui_html; import gplx.gfui.controls.standards.Gfui_html;
import gplx.gfui.controls.standards.Gfui_tab_mgr; import gplx.gfui.ipts.IptEvtDataMouse;
import gplx.gfui.draws.ColorAdp; import gplx.gfui.ipts.IptMouseBtn;
import gplx.gfui.draws.ColorAdp_; import gplx.gfui.ipts.IptMouseBtn_;
import gplx.gfui.ipts.*; import gplx.gfui.ipts.IptMouseWheel_;
import gplx.gfui.kits.core.Swt_kit; import gplx.gfui.kits.core.Swt_kit;
import java.security.acl.Owner;
import gplx.*;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.*; import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.events.*; import org.eclipse.swt.browser.BrowserFunction;
import org.eclipse.swt.graphics.*; import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.widgets.*; import org.eclipse.swt.browser.LocationListener;
import java.security.acl.Owner; import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.SWT; import org.eclipse.swt.browser.StatusTextEvent;
import org.eclipse.swt.browser.*; import org.eclipse.swt.browser.StatusTextListener;
import org.eclipse.swt.events.*; import org.eclipse.swt.browser.TitleEvent;
import org.eclipse.swt.graphics.*; import org.eclipse.swt.browser.TitleListener;
import org.eclipse.swt.widgets.*; import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseWheelListener;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
public class Swt_html implements Gxw_html, Swt_control, FocusListener, Gfo_evt_mgr_owner { public class Swt_html implements Gxw_html, Swt_control, FocusListener, Gfo_evt_mgr_owner {
private Swt_html_lnr_location lnr_location; private Swt_html_lnr_status lnr_status; private Swt_html_lnr_location lnr_location; private Swt_html_lnr_status lnr_status;
@ -159,6 +185,12 @@ public class Swt_html implements Gxw_html, Swt_control, FocusListener, Gfo_evt_m
, Browser_tid_mozilla = SWT.MOZILLA , Browser_tid_mozilla = SWT.MOZILLA
, Browser_tid_webkit = SWT.WEBKIT , Browser_tid_webkit = SWT.WEBKIT
; ;
private static final String URL_ABOUT_PREFIX = "about:";
public static String StripAboutFromUrl(String url) {
return String_.Has_at_bgn(url, URL_ABOUT_PREFIX)
? String_.Mid(url, URL_ABOUT_PREFIX.length())
: url;
}
} }
class Swt_core_cmds_html extends Swt_core__basic { class Swt_core_cmds_html extends Swt_core__basic {
public Swt_core_cmds_html(Swt_html html_box, Control control) {super(control);} public Swt_core_cmds_html(Swt_html html_box, Control control) {super(control);}
@ -207,6 +239,7 @@ class Swt_html_lnr_status implements StatusTextListener {
@Override public void changed(StatusTextEvent ev) { @Override public void changed(StatusTextEvent ev) {
if (html_box.Kit().Kit_mode__term()) return; // shutting down raises status changed events; ignore, else SWT exception thrown; DATE:2014-05-29 if (html_box.Kit().Kit_mode__term()) return; // shutting down raises status changed events; ignore, else SWT exception thrown; DATE:2014-05-29
String ev_text = ev.text; String ev_text = ev.text;
ev_text = Swt_html.StripAboutFromUrl(ev_text); // 2020-09-19|ISSUE#:799|strip "about:/" from url due to SWT 4.16
String load_by_url_path = html_box.Load_by_url_path(); String load_by_url_path = html_box.Load_by_url_path();
if (load_by_url_path != null) ev_text = String_.Replace(ev_text, load_by_url_path, ""); // remove "C:/xowa/tab_1.html" if (load_by_url_path != null) ev_text = String_.Replace(ev_text, load_by_url_path, ""); // remove "C:/xowa/tab_1.html"
// if (String_.Has(ev_text, "Loading [MathJax]")) return; // suppress MathJax messages; // NOTE: disabled for 2.1 (which no longer outputs messages to status); DATE:2013-05-03 // if (String_.Has(ev_text, "Loading [MathJax]")) return; // suppress MathJax messages; // NOTE: disabled for 2.1 (which no longer outputs messages to status); DATE:2013-05-03
@ -228,16 +261,29 @@ class Swt_html_lnr_location implements LocationListener {
@Override public void changing(LocationEvent arg) {Pub_evt(arg, Gfui_html.Evt_location_changing);} @Override public void changing(LocationEvent arg) {Pub_evt(arg, Gfui_html.Evt_location_changing);}
private void Pub_evt(LocationEvent arg, String evt) { private void Pub_evt(LocationEvent arg, String evt) {
String location = arg.location; String location = arg.location;
if (String_.Eq(location, "about:blank")) return; // location changing event fires once when page is loaded; ignore
if ( html_box.Browser_tid() == Swt_html.Browser_tid_webkit // webkit prefixes "about:blank" to anchors; causes TOC to fail when clicking on links; EX:about:blank#TOC1; DATE:2015-06-09 // location_changing fires once when page is loaded; ignore
if (String_.Eq(location, "about:blank")) {
return;
}
// webkit prefixes "about:blank" to anchors; causes TOC to fail when clicking on links; EX:about:blank#TOC1; DATE:2015-06-09
if (html_box.Browser_tid() == Swt_html.Browser_tid_webkit
&& String_.Has_at_bgn(location, "about:blank")) { && String_.Has_at_bgn(location, "about:blank")) {
location = String_.Mid(location, 11); // 11 = "about:blank".length location = String_.Mid(location, 11); // 11 = "about:blank".length
} }
if ( html_box.Html_doc_html_load_tid() == Gxw_html_load_tid_.Tid_url // navigating to file://page.html will fire location event; ignore if url mode
// 2020-09-19|ISSUE#:799|strip "about:/" from url due to SWT 4.16
location = Swt_html.StripAboutFromUrl(location);
// navigating to file://page.html will fire location event; ignore if url mode
if (html_box.Html_doc_html_load_tid() == Gxw_html_load_tid_.Tid_url
&& String_.Has_at_bgn(location, "file:") && String_.Has_at_bgn(location, "file:")
&& String_.Has_at_end(location, ".html") && String_.Has_at_end(location, ".html")
) ) {
return; return;
}
try { try {
Gfo_evt_mgr_.Pub_obj(host, evt, "v", location); Gfo_evt_mgr_.Pub_obj(host, evt, "v", location);
arg.doit = false; // cancel navigation event, else there will be an error when trying to go to invalid location arg.doit = false; // cancel navigation event, else there will be an error when trying to go to invalid location