Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*!
   * This program is free software; you can redistribute it and/or modify it under the
   * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
   * Foundation.
   *
   * You should have received a copy of the GNU Lesser General Public License along with this
   * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
   * or from the Free Software Foundation, Inc.,
   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
  * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  * See the GNU Lesser General Public License for more details.
  *
  * Copyright (c) 2002-2013 Pentaho Corporation..  All rights reserved.
  */
 
 package org.pentaho.gwt.widgets.client.utils;
 
 
 import java.util.Map;

Contains methods to show/hide iframes if they contain PDFs (<embeds>). This is primarily of interest to Firefox browsers who's Acrobat Plug-in does not work well with overlapping HTML elements.
 
 public class FrameUtils {
 
   private static Map<FrameFrameTimertimers = new HashMap<FrameFrameTimer>();

  
Private method that does the actual hiding or showing of frames if an embed is in.

Parameters:
frame
visible
 
   private static native void toggleEmbedVisibilityElement frameboolean visible )/*-{
     if(! window.globalStorage){
       return;
     }
     try{
       var doc = (frame.contentWindow.document || frame.contentDocument);
 
       if(doc == null)
       {
         return;
       }
 
       var embeds = doc.getElementsByTagName("embed");
       if(embeds.length > 0){
         var containsPdf = false;
         for(var i=0; i< embeds.length; i++){
           if(embeds[i].type && embeds[i].type == "application/pdf"){
             containsPdf = true;
             break;
           }
         }
         if(containsPdf){
           if(visible){
             if(frame.style.display == "none"){   //don't do anything unless you need to
               frame.style.display = "" ;         //Show frame
               if (frame.style.height == "100%") {
                 // force the frame to reload
                 frame.style.height = "99%";
                 frame.style.height = "100%";
               }
 
             }
           } else {
             frame.style.display = "none" ;  //hide frame
           }
         }
       }
 
       var iframes = doc.getElementsByTagName("iframe");
       if(iframes.length > 0){ // iframe has it's own iframes
         //recurse with child iframe
         for(var i=0; i<iframes.length; i++){
           @org.pentaho.gwt.widgets.client.utils.FrameUtils::toggleEmbedVisibility(Lcom/google/gwt/dom/client/Element;Z)(
               iframes[i], visible);
         }
       }
 
     } catch(e) {
       // Cross-site scripting error in all likelihood
     }
   }-*/;

  
If the frame contains an <embed> schedule it for showing/hiding

Parameters:
frame
visible
 
   public static void setEmbedVisibilityFrame frameboolean visible ) {
    if ( .containsKeyframe ) ) { // Already Scheduled
      FrameTimer t = .getframe );
      if ( t.visible == visible ) { // dupe call, ignore
        return;
      } else { // timer exists but the visibility call has changed
        t.cancel();
        t.visible = visible;
        t.schedule( 200 );
      }
    } else { // Not currently in the operations queue
      FrameTimer t = new FrameTimerframevisible );
      .putframet );
      t.schedule( 200 );
    }
  }

  
Loops through all iframe object on the document. Used when reference to Frame is not available.

Parameters:
visible
  public static void toggleEmbedVisibilityboolean visible ) {
    Element[] frames = new Element[0];
    try {
      frames = ElementUtils.getElementsByTagName"iframe" ); //$NON-NLS-1$
    } catch ( ClassCastException cce ) {
      // ignore class cast exceptions in here, they are happening in hosted mode for Elements
      //ignore
    }
    for ( Element ele : frames ) {
      Frame f = null;
      // Attempt to find a previously GWT-wrapped frame instance in our timer collection
      Object[] tmap = .entrySet().toArray();
      for ( int i = 0; i < tmap.lengthi++ ) {
        @SuppressWarnings"unchecked" )
        Map.Entry<FrameFrameTimert = (Map.Entry<FrameFrameTimer>) tmap[i];
        if ( t.getKey().getElement() == ele ) {
          // found an already wrapped instance
          f = t.getKey();
        }
      }
      if ( f == null ) {
        f = Frame.wrapele );
      }
      setEmbedVisibilityfvisible );
    }
  }

  
This Timer adds a buffer to show/hide operations so other code has a chance of "canceling" it.
  private static class FrameTimer extends Timer {
    Frame frame;
    boolean visible;
    public FrameTimerFrame frameboolean visible ) {
      this. = frame;
      this. = visible;
    }
    public void run() {
      .remove );
    }
  }
New to GrepCode? Check out our FAQ X