/** * Perform the action of the plugin. * * @param document the current document. */ public boolean perform(Document document) throws IOException { // Interact with the user to get the layer tag/ Tag layerTag = getLayerTagFromUser(document); if (layerTag == null) return false; // User cancled. Tag endTag = new Tag(layerTag.getName(), false); // Get the output stream to hold the new document text. PrintWriter out = new PrintWriter(document.getOutput()); // Create a lexical stream to tokenize the old document text. LexicalStream in = new LexicalStream(new SelectedHTMLReader(document.getInput(), out)); for (; ; ) { // Get the next token of the document. Token token = in.next(); if (token == null) break; // Null means we've finished the document. else if (token instanceof Comment) { Comment comment = (Comment) token; if (comment.isSelectionStart()) { out.print(layerTag); } else if (comment.isSelectionEnd()) { out.print(comment); out.print(endTag); continue; // So comment isn't printed twice. } } out.print(token); } out.close(); return true; }
void writeImageToDisk(Document document, String imgURLString, String fileName) { // We could just reference the image on the netscape site, // but the point of this example is to show how to write // a file to the disk. // In order to do this, we need to have the ability access files. netscape.security.PrivilegeManager.enablePrivilege("UniversalFileAccess"); // And the ability to connect to an arbitrary URL. netscape.security.PrivilegeManager.enablePrivilege("UniversalConnect"); // Copy the image to the work directory. File outFile = new File(document.getWorkDirectory(), fileName); if (!outFile.exists()) { try { InputStream in = new URL(imgURLString).openStream(); FileOutputStream outStream = new FileOutputStream(outFile); int chunkSize = 1024; byte[] bytes = new byte[chunkSize]; int readSize; while ((readSize = in.read(bytes)) >= 0) { outStream.write(bytes, 0, readSize); } outStream.close(); } catch (Exception e) { e.printStackTrace(); } } }
/** * Perform the action of the plugin. This plugin adds a "Netscape Now" button with a link to the * Netscape home page. * * @param document the current document. */ public boolean perform(Document document) throws IOException { // Create a print stream for the new document text. PrintWriter out = new PrintWriter(document.getOutput()); // Create a lexical stream to tokenize the old document text. LexicalStream in = new LexicalStream(new SelectedHTMLReader(document.getInput(), out)); // Keep track of whether or not we are in the selected text. // At the beginning of the document we're outside the selection. // After we encounter the start-selection comment, we're inside // the selection. // After we encounter the end-selection comment, we're outside // the selection again. boolean inSelection = false; Comment selectionStart = null; for (; ; ) { // Get the next token of the document. Token token = in.next(); if (token == null) break; // Null means we've finished the document. else if (token instanceof Comment) { Comment comment = (Comment) token; if (comment.isSelectionStart()) { selectionStart = comment; inSelection = true; continue; // Don't print the selection start yet. } else if (comment.isSelectionEnd()) { inSelection = false; out.print(selectionStart); insertButton(document, out); } else { // don't output this generic comment. continue; } } out.print(token); } out.close(); return true; }
void insertButton(Document document, PrintWriter out) { String fileName = "netnow3.gif"; String imgURLString = "http://home.netscape.com/comprod/products/navigator/version_3.0/images/" + fileName; writeImageToDisk(document, imgURLString, fileName); try { // Write the HTML for the button Tag anchor = new Tag("A"); anchor.addAttribute("HREF", "http://www.netscape.com"); Tag anchorEnd = new Tag("A", false); Tag img = new Tag("IMG"); URL imgURL = new URL(document.getWorkDirectoryURL(), fileName); img.addAttribute("SRC", imgURL.toString()); out.print(anchor); out.print(img); out.print(anchorEnd); } catch (Throwable t) { t.printStackTrace(); } }