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;