WordPress.org

Plugin Directory

Changeset 631958


Ignore:
Timestamp:
11/29/12 20:07:45 (17 months ago)
Author:
ethitter
Message:

Jetpack Photon updates

  • Better handling of images with relative dimensions.
  • Fall back to registered image size in WP if detected from HTML classes.
  • Capture attachment ID if possible. Unused at the moment.
  • Coding standards updates.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • jetpack/trunk/modules/photon.php

    r627834 r631958  
    8686     */ 
    8787    public function filter_the_content( $content ) { 
    88         if ( false != preg_match_all( '#(<a.+?href=["|\'](.+?)["|\'].+?>\s*)?(<img.+?src=["|\'](.+?)["|\'].+?/?>){1}(\s*</a>)?#i', $content, $images ) ) { 
     88        if ( preg_match_all( '#(<a.+?href=["|\'](.+?)["|\'].+?>\s*)?(<img.+?src=["|\'](.+?)["|\'].+?/?>){1}(\s*</a>)?#i', $content, $images ) ) { 
    8989            global $content_width; 
     90 
     91            $image_sizes = $this->image_sizes(); 
    9092 
    9193            foreach ( $images[0] as $index => $tag ) { 
     
    9395                $transform = 'resize'; 
    9496 
     97                // Start with a clean attachment ID each time 
     98                $attachment_id = false; 
     99 
    95100                // Identify image source 
    96101                $src = $src_orig = $images[4][ $index ]; 
     
    98103                // Support Automattic's Lazy Load plugin 
    99104                // Can't modify $tag yet as we need unadulterated version later 
    100                 if ( false != preg_match( '#data-lazy-src=["|\'](.+?)["|\']#i', $images[3][ $index ], $lazy_load_src ) ) { 
     105                if ( preg_match( '#data-lazy-src=["|\'](.+?)["|\']#i', $images[3][ $index ], $lazy_load_src ) ) { 
    101106                    $placeholder_src = $placeholder_src_orig = $src; 
    102107                    $src = $src_orig = $lazy_load_src[1]; 
     
    111116 
    112117                // First, check the image tag 
    113                 if ( preg_match( '#width=["|\']?(\d+)["|\']?#i', $images[3][ $index ], $width_string ) ) 
    114                     $width = (int) $width_string[1]; 
    115  
    116                 if ( preg_match( '#height=["|\']?(\d+)["|\']?#i', $images[3][ $index ], $height_string ) ) 
    117                     $height = (int) $height_string[1]; 
     118                if ( preg_match( '#width=["|\']?([\d%]+)["|\']?#i', $images[3][ $index ], $width_string ) ) 
     119                    $width = $width_string[1]; 
     120 
     121                if ( preg_match( '#height=["|\']?([\d%]+)["|\']?#i', $images[3][ $index ], $height_string ) ) 
     122                    $height = $height_string[1]; 
     123 
     124                // Can't pass both a relative width and height, so unset the height in favor of not breaking the horizontal layout. 
     125                if ( false !== strpos( $width, '%' ) && false !== strpos( $width, '%' ) ) 
     126                    $width = $height = false; 
     127 
     128                // Classes 
     129                if ( preg_match( '#class=["|\']?([^"\']+)["|\']?#i', $images[3][ $index ], $classes ) ) { 
     130                    // WP registered image size, only if width and height are needed 
     131                    if ( false === $width && false === $height && preg_match( '#size-([^\s]+)#i', $classes[1], $size ) ) { 
     132                        $size = array_pop( $size ); 
     133 
     134                        if ( 'full' != $size && array_key_exists( $size, $image_sizes ) ) { 
     135                            $width = (int) $image_sizes[ $size ]['width']; 
     136                            $height = (int) $image_sizes[ $size ]['height']; 
     137                            $transform = $image_sizes[ $size ]['crop'] ? 'resize' : 'fit'; 
     138                        } 
     139                    } 
     140 
     141                    // WP Attachment ID 
     142                    if ( preg_match( '#wp-image-(\d+)#i', $classes[1], $attachment_id ) ) 
     143                        $attachment_id = intval( array_pop( $attachment_id ) ); 
     144                } 
    118145 
    119146                // If image tag lacks width and height arguments, try to determine from strings WP appends to resized image filenames. 
    120                 if ( false === $width && false === $height && false != preg_match( '#(-\d+x\d+)\.(' . implode('|', $this->extensions ) . '){1}$#i', $src, $width_height_string ) ) { 
     147                if ( false === $width && false === $height && preg_match( '#(-\d+x\d+)\.(' . implode('|', $this->extensions ) . '){1}$#i', $src, $width_height_string ) ) { 
    121148                    $width = (int) $width_height_string[1]; 
    122149                    $height = (int) $width_height_string[2]; 
     
    124151 
    125152                // If width is available, constrain to $content_width 
    126                 if ( false !== $width && is_numeric( $content_width ) ) { 
    127                     if ( $width > $content_width && false !== $height ) { 
     153                if ( false !== $width && false === strpos( $width, '%' ) && is_numeric( $content_width ) ) { 
     154                    if ( $width > $content_width && false !== $height && false === strpos( $height, '%' ) ) { 
    128155                        $height = round( ( $content_width * $height ) / $width ); 
    129156                        $width = $content_width; 
    130                     } 
    131                     elseif ( $width > $content_width ) { 
     157                    } elseif ( $width > $content_width ) { 
    132158                        $width = $content_width; 
    133159                    } 
     
    144170 
    145171                // Build URL, first removing WP's resized string so we pass the original image to Photon 
    146                 if ( false != preg_match( '#(-\d+x\d+)\.(' . implode('|', $this->extensions ) . '){1}$#i', $src, $src_parts ) ) 
     172                if ( preg_match( '#(-\d+x\d+)\.(' . implode('|', $this->extensions ) . '){1}$#i', $src, $src_parts ) ) 
    147173                    $src = str_replace( $src_parts[1], '', $src ); 
    148174 
     
    181207 
    182208                    // Remove the width and height arguments from the tag to prevent distortion 
    183                     $new_tag = preg_replace( '#(width|height)=["|\']?(\d+)["|\']?\s{1}#i', '', $new_tag ); 
     209                    $new_tag = preg_replace( '#(width|height)=["|\']?[\d%]+["|\']?\s{1}#i', '', $new_tag ); 
    184210 
    185211                    // If image is linked to an image (presumably itself, but who knows), pass link href to Photon sans arguments 
     
    266292                    false 
    267293                ); 
    268             } 
    269             elseif ( is_array( $size ) ) { 
     294            } elseif ( is_array( $size ) ) { 
    270295                // Pull width and height values from the provided array, if possible 
    271296                $width = isset( $size[0] ) ? (int) $size[0] : false; 
Note: See TracChangeset for help on using the changeset viewer.