From 85ab7974cbaa302a18f4c65bf8f0e82359b06e20 Mon Sep 17 00:00:00 2001 From: Skylar Date: Thu, 3 Dec 2015 04:32:09 -0700 Subject: [PATCH] Add error pages, about: urls to Browser --- src/net/apocalypselabs/symat/Main.java | 30 ++--- src/net/apocalypselabs/symat/WebBrowser.java | 113 +++++++++++++----- .../apocalypselabs/symat/images/browser.png | Bin 0 -> 3234 bytes .../symat/resources/errorpage.html | 90 ++++++++++++++ .../symat/resources/homepage.html | 24 ++-- 5 files changed, 203 insertions(+), 54 deletions(-) create mode 100644 src/net/apocalypselabs/symat/images/browser.png create mode 100644 src/net/apocalypselabs/symat/resources/errorpage.html diff --git a/src/net/apocalypselabs/symat/Main.java b/src/net/apocalypselabs/symat/Main.java index 2f96919..fdf925a 100644 --- a/src/net/apocalypselabs/symat/Main.java +++ b/src/net/apocalypselabs/symat/Main.java @@ -341,9 +341,8 @@ public class Main extends JRibbonFrame { JRibbon ribbon = getRibbon(); JRibbonBand coreband = new JRibbonBand("Core", null); JRibbonBand appsband = new JRibbonBand("Apps", null); - JRibbonBand webband = new JRibbonBand("Community", null); + JRibbonBand webband = new JRibbonBand("Online", null); JRibbonBand collabband = new JRibbonBand("Team", null); - //JRibbonBand getpluginband = new JRibbonBand("Install", null); try { loadPlugins(); @@ -385,12 +384,10 @@ public class Main extends JRibbonFrame { WebBrowser.WIKI_LOGO)); } }); - forumbtn.addActionListener(new ActionListener() { + browserbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { - loadFrame(new WebBrowser("Community Forum", - "http://forum.symatapp.com/", - WebBrowser.FORUM_LOGO)); + loadFrame(new WebBrowser()); } }); padsbtn.addActionListener(new ActionListener() { @@ -416,8 +413,8 @@ public class Main extends JRibbonFrame { "Write quick notes on a virtual napkin.")); wikibtn.setActionRichTooltip(new RichTooltip("SyMAT Wiki", "View and edit online documentation and tutorials.")); - forumbtn.setActionRichTooltip(new RichTooltip("Support Forum", - "Discuss and share with the SyMAT community.")); + browserbtn.setActionRichTooltip(new RichTooltip("Web Browser", + "Go online and browse the web.")); padsbtn.setActionRichTooltip(new RichTooltip("Code Pads", "Collaborate over the Internet on projects.")); tasksbtn.setActionRichTooltip(new RichTooltip("Task List", @@ -428,12 +425,11 @@ public class Main extends JRibbonFrame { appsband.addCommandButton(graphbtn, RibbonElementPriority.MEDIUM); appsband.addCommandButton(notepadbtn, RibbonElementPriority.MEDIUM); + appsband.addCommandButton(tasksbtn, RibbonElementPriority.MEDIUM); webband.addCommandButton(wikibtn, RibbonElementPriority.LOW); - webband.addCommandButton(forumbtn, RibbonElementPriority.LOW); - - collabband.addCommandButton(padsbtn, RibbonElementPriority.MEDIUM); - collabband.addCommandButton(tasksbtn, RibbonElementPriority.MEDIUM); + webband.addCommandButton(browserbtn, RibbonElementPriority.LOW); + webband.addCommandButton(padsbtn, RibbonElementPriority.MEDIUM); coreband.setResizePolicies((List) Arrays.asList( new CoreRibbonResizePolicies.None(coreband.getControlPanel()), @@ -454,14 +450,14 @@ public class Main extends JRibbonFrame { // new CoreRibbonResizePolicies.None(appsband.getControlPanel()), // new IconRibbonBandResizePolicy(pluginband.getControlPanel()))); - RibbonTask hometask = new RibbonTask("Home", coreband, appsband); - RibbonTask webtask = new RibbonTask("Tools", webband, collabband); + RibbonTask hometask = new RibbonTask("Home", coreband, appsband, webband); + //RibbonTask webtask = new RibbonTask("Tools", webband, collabband); RibbonTask plugintask = new RibbonTask("Plugins", pluginband); loadRibbonMenu(null); ribbon.addTask(hometask); - ribbon.addTask(webtask); + //ribbon.addTask(webtask); ribbon.addTask(plugintask); } @@ -1161,8 +1157,8 @@ public class Main extends JRibbonFrame { /** * */ - public static JCommandButton forumbtn - = new JCommandButton("Forum", getRibbonIcon("forum")); + public static JCommandButton browserbtn + = new JCommandButton("Web", getRibbonIcon("browser")); /** * diff --git a/src/net/apocalypselabs/symat/WebBrowser.java b/src/net/apocalypselabs/symat/WebBrowser.java index 09d8fdb..abe6457 100644 --- a/src/net/apocalypselabs/symat/WebBrowser.java +++ b/src/net/apocalypselabs/symat/WebBrowser.java @@ -190,27 +190,6 @@ public class WebBrowser extends javax.swing.JInternalFrame { loadURL("http://wiki.symatapp.com/"); } - /** - * - * @return - */ - public String homepage() { - try { - String text = ""; - BufferedReader reader = new BufferedReader( - new InputStreamReader( - WebBrowser.class - .getResourceAsStream("resources/homepage.html"))); - String line; - while ((line = reader.readLine()) != null) { - text += line; - } - return text; - } catch (IOException ex) { - return "Error: " + ex.getMessage(); - } - } - /** * * @param title @@ -274,14 +253,90 @@ public class WebBrowser extends javax.swing.JInternalFrame { * @param url */ public void loadURL(final String url) { - Platform.runLater(new Runnable() { - @Override - public void run() { - webEngine.load(url); - resizeAll(); + if (url.startsWith("about:")) { + final String action = url.replace("about:", ""); + Platform.runLater(new Runnable() { + @Override + public void run() { + switch (action) { + case "home": + webEngine.loadContent(homepage()); + break; + case "blank": + webEngine.loadContent(""); + break; + case "new": + Main.loadFrame(new WebBrowser()); + break; + default: + webEngine.loadContent(errorpage("Invalid URL", "That isn't a valid address.")); + } + resizeAll(); + } + }); + urlBox.setText(url); + } else { + Platform.runLater(new Runnable() { + @Override + public void run() { + webEngine.load(url); + resizeAll(); + } + }); + urlBox.setText(url); + } + } + + /** + * Get the homepage/startpage HTML. + * + * @return + */ + public String homepage() { + try { + String text = ""; + BufferedReader reader = new BufferedReader( + new InputStreamReader( + WebBrowser.class + .getResourceAsStream("resources/homepage.html"))); + String line; + while ((line = reader.readLine()) != null) { + text += line; } - }); - urlBox.setText(url); + return text; + } catch (IOException ex) { + return errorpage("Error: " + ex.getMessage(), ex.toString()); + } + } + + /** + * Returns a webpage suitable for showing error messages. + * + * @param error Short error message + * @param details Error information + * @return HTML page content + */ + public String errorpage(String error, String details) { + try { + String text = ""; + BufferedReader reader = new BufferedReader( + new InputStreamReader( + WebBrowser.class + .getResourceAsStream("resources/errorpage.html"))); + String line; + while ((line = reader.readLine()) != null) { + text += line; + } + text = text.replaceAll("<<>>", error); + text = text.replaceAll("<<
>>", details); + return text; + } catch (IOException ex) { + return "Oh, no! Something bad happened:
" + + error + + "
Also, an error occured " + + "while displaying the error page: " + + ex.getMessage(); + } } /** @@ -437,7 +492,7 @@ public class WebBrowser extends javax.swing.JInternalFrame { if (urlBox.getText().equals("about:home")) { loadString(homepage()); } else { - if (!urlBox.getText().startsWith("http")) { + if (!urlBox.getText().startsWith("http") && !urlBox.getText().startsWith("about:")) { urlBox.setText("http://" + urlBox.getText()); } loadURL(urlBox.getText()); diff --git a/src/net/apocalypselabs/symat/images/browser.png b/src/net/apocalypselabs/symat/images/browser.png new file mode 100644 index 0000000000000000000000000000000000000000..ee28b8f5f3be47887741ccfded01ab94f99de594 GIT binary patch literal 3234 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 + + + + Error + + + + + +
+

Oh, no!

+

An error occurred:

+

<<>>

+

<<

>>

+
+ + diff --git a/src/net/apocalypselabs/symat/resources/homepage.html b/src/net/apocalypselabs/symat/resources/homepage.html index d7a7971..995ad7b 100644 --- a/src/net/apocalypselabs/symat/resources/homepage.html +++ b/src/net/apocalypselabs/symat/resources/homepage.html @@ -46,10 +46,15 @@ you permission, that decision is considered final and binding. --> - SyMAT Homepage + SyMAT Browser
-

SyMAT

-

Home | - Wiki | - Forums

+

Welcome to SyMAT!

+
+ + +
+

SyMAT Wiki | WolframAlpha | Changelogs

+