Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.92 KB | None | 0 0
  1. <?php
  2. class Img extends Create_Responsive_image
  3. {
  4. public $markup;
  5. public $attributes;
  6.  
  7. function __construct( $id, $settings )
  8. {
  9. parent::__construct( $id, $settings );
  10. $this->set_attributes();
  11. if ( has_filter( 'rwp_edit_attributes' ) ) {
  12. $this->settings['attributes'] = apply_filters( 'rwp_edit_attributes', $this->settings['attributes'] );
  13. }
  14. $markup = $this->create_markup();
  15. if ( get_option( 'rwp_debug_mode', 'off' ) == 'on' ) {
  16. $markup = $this->prepend_debug_information( $markup );
  17. }
  18. $this->markup = $markup;
  19. }
  20.  
  21. protected function set_attributes()
  22. {
  23. $default_attributes = array(
  24. //'sizes' => $this->sizes_attribute()
  25. 'data-sizes' => 'auto',
  26. 'class' => 'lazyload'
  27. );
  28.  
  29. if ( isset($this->settings['attributes']['img']) ) {
  30. $this->settings['attributes'] = array_replace_recursive($default_attributes, $this->settings['attributes']['img']);
  31. } elseif ( isset($this->settings['attributes']) ) {
  32. $this->settings['attributes'] = array_replace_recursive($default_attributes, $this->settings['attributes']);
  33. } else {
  34. $this->settings['attributes'] = $default_attributes;
  35. }
  36. }
  37.  
  38. protected function sizes_attribute()
  39. {
  40. $images = $this->images;
  41. usort($images, array($this, 'order_images_by_media_query'));
  42. $images = $this->find_smallest_image_and_place_it_last_in_array( $images );
  43.  
  44. $attribute = array();
  45. for ($i=0; $i < count($images); $i++) {
  46. if ( isset($images[$i]['media_query']) ) {
  47. $mq = $images[$i]['media_query'];
  48. $attribute[] = '('.$mq['property'].': '.$mq['value'].') '.$images[$i]['width'].'px';
  49. } else {
  50. $attribute[] = $images[$i]['width'].'px';
  51. }
  52. }
  53. $this->attributes['sizes'] = implode(', ', $attribute);
  54. return $this->attributes['sizes'];
  55. }
  56. protected function order_images_by_media_query( $a, $b )
  57. {
  58. if ( isset($a['media_query']['value']) && isset($b['media_query']['value']) ) {
  59. if ( (int) $a['media_query']['value'] == (int) $b['media_query']['value'] ) {
  60. return 0;
  61. }
  62. return ( (int) $a['media_query']['value'] < (int) $b['media_query']['value'] ) ? -1 : 1;
  63. }
  64. }
  65.  
  66. protected function find_smallest_image_and_place_it_last_in_array( $images )
  67. {
  68. $smallest_image = array_filter($images, array($this, 'find_smallest_image'));
  69. unset($images[key($smallest_image)]);
  70. $images = array_reverse($images);
  71. $images[] = $smallest_image[key($smallest_image)];
  72. return $images;
  73. }
  74.  
  75. protected function find_smallest_image( $image )
  76. {
  77. if ( empty($image['media_query']) ) {
  78. return $image;
  79. }
  80. }
  81.  
  82. protected function srcset_attribute()
  83. {
  84. $attribute = array();
  85. for ($i=0; $i < count($this->images); $i++) {
  86. $attribute[] = $this->images[$i]['src'].' '.$this->images[$i]['width'].'w';
  87. if ( isset($this->images[$i]['highres']) ) {
  88. foreach ($this->images[$i]['highres'] as $density => $highres) {
  89. $attribute[] = $highres['src'].' '.$highres['width'].'w';
  90. }
  91. }
  92. }
  93. $this->attributes['srcset'] = implode(', ', $attribute);
  94. return $this->attributes['srcset'];
  95. }
  96.  
  97. protected function create_markup()
  98. {
  99. $img_attributes = $this->create_attributes($this->settings['attributes']);
  100. $markup = '<img ';
  101. if ( count($this->images) == 1 ) :
  102. $markup .= 'data-src="'.$this->images[0]['src'].'"';
  103. else:
  104. $markup .= 'data-srcset="'.$this->srcset_attribute().'" ';
  105. endif;
  106. $markup .= $img_attributes;
  107. $markup .= '>';
  108. return $markup;
  109. }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement