19 package org.sleuthkit.autopsy.contentviewers;
21 import org.jsoup.Jsoup;
22 import org.jsoup.nodes.Document;
23 import org.openide.util.NbBundle.Messages;
28 @SuppressWarnings(
"PMD.SingularField")
29 final class HtmlPanel extends javax.swing.JPanel {
31 private static final long serialVersionUID = 1L;
33 private String htmlText;
41 Utilities.configureTextPaneAsHtml(htmlbodyTextPane);
49 void setHtmlText(String htmlText) {
50 this.htmlText = htmlText;
58 htmlbodyTextPane.setText(
"");
59 showImagesToggleButton.setEnabled(
false);
69 private String wrapInHtmlBody(String htmlText) {
70 return "<html><body>" + htmlText +
"</body></html>";
80 private String cleanseHTML(String htmlInString) {
82 Document doc = Jsoup.parse(htmlInString);
85 doc.select(
"img[src]").forEach(img -> img.attr(
"src",
""));
94 "HtmlPanel_showImagesToggleButton_show=Show Images",
95 "HtmlPanel_showImagesToggleButton_hide=Hide Images",
96 "Html_text_display_error=The HTML text cannot be displayed, it may not be correctly formed HTML.",
98 private void refresh() {
99 if (
false == htmlText.isEmpty()) {
101 if (showImagesToggleButton.isSelected()) {
102 showImagesToggleButton.setText(Bundle.HtmlPanel_showImagesToggleButton_hide());
103 this.htmlbodyTextPane.setText(wrapInHtmlBody(htmlText));
105 showImagesToggleButton.setText(Bundle.HtmlPanel_showImagesToggleButton_show());
106 this.htmlbodyTextPane.setText(wrapInHtmlBody(cleanseHTML(htmlText)));
108 showImagesToggleButton.setEnabled(
true);
109 htmlbodyTextPane.setCaretPosition(0);
110 }
catch(Exception ex) {
111 this.htmlbodyTextPane.setText(wrapInHtmlBody(Bundle.Html_text_display_error()));
121 @SuppressWarnings(
"unchecked")
123 private
void initComponents() {
125 htmlScrollPane =
new javax.swing.JScrollPane();
126 htmlbodyTextPane =
new javax.swing.JTextPane();
127 showImagesToggleButton =
new javax.swing.JToggleButton();
129 htmlScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
131 htmlbodyTextPane.setEditable(
false);
132 htmlScrollPane.setViewportView(htmlbodyTextPane);
134 org.openide.awt.Mnemonics.setLocalizedText(showImagesToggleButton,
org.openide.util.NbBundle.getMessage(HtmlPanel.class,
"HtmlPanel.showImagesToggleButton.text"));
135 showImagesToggleButton.addActionListener(
new java.awt.event.ActionListener() {
136 public void actionPerformed(java.awt.event.ActionEvent evt) {
137 showImagesToggleButtonActionPerformed(evt);
141 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
142 this.setLayout(layout);
143 layout.setHorizontalGroup(
144 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
145 .addComponent(htmlScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
146 .addGroup(layout.createSequentialGroup()
147 .addComponent(showImagesToggleButton)
148 .addGap(0, 0, Short.MAX_VALUE))
150 layout.setVerticalGroup(
151 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
152 .addGroup(layout.createSequentialGroup()
153 .addComponent(showImagesToggleButton)
154 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
155 .addComponent(htmlScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 71, Short.MAX_VALUE))
159 private void showImagesToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {
165 private javax.swing.JScrollPane htmlScrollPane;
166 private javax.swing.JTextPane htmlbodyTextPane;
167 private javax.swing.JToggleButton showImagesToggleButton;