package mulCal.gui; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.net.URL; import java.net.URLConnection; import java.awt.*; import java.util.logging.*; import javax.swing.*; import org.w3c.dom.Document; import org.w3c.dom.html2.HTMLElement; import org.xml.sax.InputSource; import org.lobobrowser.html.*; import org.lobobrowser.html.gui.*; import org.lobobrowser.html.parser.*; import org.lobobrowser.html.test.*; public class BarebonesTest { public static void main(String[] args) throws Exception { // Initialize logging so only Cobra warnings are seen. Logger.getLogger("org.lobobrowser") .setLevel(Level.WARNING); /* // Open a connection on the URL we want to render first. String uri = "http://lobobrowser.org/browser/home.jsp"; URL url = new URL(uri); URLConnection connection = url.openConnection(); InputStream in = connection.getInputStream(); */ // Open an input stream String uri = "assets/index.html"; InputStream in = new FileInputStream (uri); // A Reader should be created with the correct charset, // which may be obtained from the Content-Type header // of an HTTP response. Reader reader = new InputStreamReader(in); // InputSourceImpl constructor with URI recommended // so the renderer can resolve page component URLs. InputSource is = new InputSourceImpl(reader, "file://" + uri); HtmlPanel htmlPanel = new HtmlPanel(); UserAgentContext ucontext = new LocalUserAgentContext(); HtmlRendererContext rendererContext = new LocalHtmlRendererContext(htmlPanel, ucontext); // Set a preferred width for the HtmlPanel, // which will allow getPreferredSize() to // be calculated according to block content. // We do this here to illustrate the // feature, but is generally not // recommended for performance reasons. htmlPanel.setPreferredSize(new Dimension(800, 600)); // Note: This example does not perform incremental // rendering while loading the initial document. DocumentBuilderImpl builder = new DocumentBuilderImpl( rendererContext.getUserAgentContext(), rendererContext); Document document = builder.parse(is); in.close(); // Set the document in the HtmlPanel. This method // schedules the document to be rendered in the // GUI thread. htmlPanel.setDocument(document, rendererContext); // Create a JFrame and add the HtmlPanel to it. final JFrame frame = new JFrame(); frame.getContentPane().add(htmlPanel); // We pack the JFrame to demonstrate the // validity of HtmlPanel's preferred size. // Normally you would want to set a specific // JFrame size instead. // pack() should be called in the GUI dispatch // thread since the document is scheduled to // be rendered in that thread, and is required // for the preferred size determination. EventQueue.invokeLater(new Runnable() { public void run() { frame.pack(); frame.setVisible(true); } }); } private static class LocalUserAgentContext extends SimpleUserAgentContext { // Override methods from SimpleUserAgentContext to // provide more accurate information about application. public LocalUserAgentContext() { } public String getAppMinorVersion() { return "0"; } public String getAppName() { return "BarebonesTest"; } public String getAppVersion() { return "1"; } public String getUserAgent() { return "Mozilla/4.0 (compatible;) CobraTest/1.0"; } } private static class LocalHtmlRendererContext extends SimpleHtmlRendererContext { // Override methods from SimpleHtmlRendererContext // to provide browser functionality to the renderer. public LocalHtmlRendererContext(HtmlPanel contextComponent, UserAgentContext ucontext) { super(contextComponent, ucontext); } public void linkClicked(HTMLElement linkNode, URL url, String target) { super.linkClicked(linkNode, url, target); // This may be removed: System.out.println("## Link clicked: " + linkNode); } public HtmlRendererContext open(URL url, String windowName, String windowFeatures, boolean replace) { // This is called on window.open(). HtmlPanel newPanel = new HtmlPanel(); JFrame frame = new JFrame(); frame.setSize(600, 400); frame.getContentPane().add(newPanel); HtmlRendererContext newCtx = new LocalHtmlRendererContext(newPanel, this.getUserAgentContext()); newCtx.navigate(url, "_this"); return newCtx; } } }