| Conditions | 9 |
| Paths | 98 |
| Total Lines | 76 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | <?php |
||
| 135 | function render_amp_pin( $attr ) { |
||
| 136 | $info = null; |
||
| 137 | if ( preg_match( URL_PATTERN, $attr['url'], $matches ) ) { |
||
| 138 | $info = fetch_pin_info( $matches['pin_id'] ); |
||
| 139 | } |
||
| 140 | |||
| 141 | if ( is_array( $info ) ) { |
||
| 142 | $image = $info['images']['237x']; |
||
| 143 | $title = isset( $info['rich_metadata']['title'] ) ? $info['rich_metadata']['title'] : null; |
||
| 144 | $description = isset( $info['rich_metadata']['description'] ) ? $info['rich_metadata']['description'] : null; |
||
| 145 | |||
| 146 | // This placeholder will appear while waiting for the amp-pinterest component to initialize (or if it fails to initialize due to JS being disabled). |
||
| 147 | $placeholder = sprintf( |
||
| 148 | // The AMP_Img_Sanitizer will convert his to <amp-img> while also supplying `noscript > img` as fallback when JS is disabled. |
||
| 149 | '<a href="%s" placeholder><img src="%s" alt="%s" layout="fill" object-fit="contain" object-position="top left"></a>', |
||
| 150 | esc_url( $attr['url'] ), |
||
| 151 | esc_url( $image['url'] ), |
||
| 152 | esc_attr( $title ) |
||
| 153 | ); |
||
| 154 | |||
| 155 | $amp_padding = 5; // See <https://github.com/ampproject/amphtml/blob/b5dea36e0b8bd012585d50839766a084f99a3685/extensions/amp-pinterest/0.1/amp-pinterest.css#L269>. |
||
| 156 | $amp_fixed_width = 237; // See <https://github.com/ampproject/amphtml/blob/b5dea36e0b8bd012585d50839766a084f99a3685/extensions/amp-pinterest/0.1/amp-pinterest.css#L270>. |
||
| 157 | $pin_info_height = 60; // Minimum Obtained by measuring the height of the .-amp-pinterest-embed-pin-text element. |
||
| 158 | |||
| 159 | // Add height based on how much description there is. There are roughly 30 characters on a line of description text. |
||
| 160 | $has_description = false; |
||
| 161 | if ( ! empty( $info['description'] ) ) { |
||
| 162 | $desc_padding_top = 5; // See <https://github.com/ampproject/amphtml/blob/b5dea36e0b8bd012585d50839766a084f99a3685/extensions/amp-pinterest/0.1/amp-pinterest.css#L342>. |
||
| 163 | $pin_info_height += $desc_padding_top; |
||
| 164 | |||
| 165 | // Trim whitespace on description if there is any left, use to calculate the likely rows of text. |
||
| 166 | $description = trim( $info['description'] ); |
||
| 167 | if ( strlen( $description ) > 0 ) { |
||
| 168 | $has_description = true; |
||
| 169 | $desc_line_height = 17; // See <https://github.com/ampproject/amphtml/blob/b5dea36e0b8bd012585d50839766a084f99a3685/extensions/amp-pinterest/0.1/amp-pinterest.css#L341>. |
||
| 170 | $pin_info_height += ceil( strlen( $description ) / 30 ) * $desc_line_height; |
||
| 171 | } |
||
| 172 | } |
||
| 173 | |||
| 174 | if ( ! empty( $info['repin_count'] ) ) { |
||
| 175 | $pin_stats_height = 16; // See <https://github.com/ampproject/amphtml/blob/b5dea36e0b8bd012585d50839766a084f99a3685/extensions/amp-pinterest/0.1/amp-pinterest.css#L322>. |
||
| 176 | $pin_info_height += $pin_stats_height; |
||
| 177 | } |
||
| 178 | |||
| 179 | // When Pin description is empty, make sure title and description from rich metadata are supplied for accessibility and discoverability. |
||
| 180 | $title = $has_description ? '' : implode( "\n", array_filter( array( $title, $description ) ) ); |
||
| 181 | |||
| 182 | $amp_pinterest = sprintf( |
||
| 183 | '<amp-pinterest style="%1$s" data-do="embedPin" data-url="%2$s" width="%3$d" height="%4$d" title="%5$s">%6$s</amp-pinterest>', |
||
| 184 | esc_attr( 'line-height:1.5; font-size:21px' ), // Override styles from theme due to precise height calculations above. |
||
| 185 | esc_url( $attr['url'] ), |
||
| 186 | $amp_fixed_width + ( $amp_padding * 2 ), |
||
| 187 | $image['height'] + $pin_info_height + ( $amp_padding * 2 ), |
||
| 188 | esc_attr( $title ), |
||
| 189 | $placeholder |
||
| 190 | ); |
||
| 191 | } else { |
||
| 192 | // Fallback embed when info is not available. |
||
| 193 | $amp_pinterest = sprintf( |
||
| 194 | '<amp-pinterest data-do="embedPin" data-url="%1$s" width="%2$d" height="%3$d">%4$s</amp-pinterest>', |
||
| 195 | esc_url( $attr['url'] ), |
||
| 196 | 450, // Fallback width. |
||
| 197 | 750, // Fallback height. |
||
| 198 | sprintf( |
||
| 199 | '<a placeholder href="%s">%s</a>', |
||
| 200 | esc_url( $attr['url'] ), |
||
| 201 | esc_html( $attr['url'] ) |
||
| 202 | ) |
||
| 203 | ); |
||
| 204 | } |
||
| 205 | |||
| 206 | return sprintf( |
||
| 207 | '<div class="wp-block-jetpack-pinterest">%s</div>', |
||
| 208 | $amp_pinterest |
||
| 209 | ); |
||
| 210 | } |
||
| 211 | |||
| 247 |
In PHP, under loose comparison (like
==, or!=, orswitchconditions), values of different types might be equal.For
stringvalues, the empty string''is a special case, in particular the following results might be unexpected: