diff --git a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php index c77b3c1e5..8ac3e63d4 100644 --- a/system/src/Grav/Common/Markdown/ParsedownGravTrait.php +++ b/system/src/Grav/Common/Markdown/ParsedownGravTrait.php @@ -146,23 +146,28 @@ trait ParsedownGravTrait } } + $data = $medium->htmlRaw(); + // set the src element with the new generated url if (!isset($actions['lightbox'])) { - $excerpt['element']['attributes']['src'] = $medium->url(false); - $excerpt['element']['attributes']['srcset'] = $medium->srcset(); + $excerpt['element']['attributes']['src'] = $data['img_src']; + $excerpt['element']['attributes']['srcset'] = $data['img_srcset'];; $excerpt['element']['attributes']['sizes'] = '100vw'; } else { // Create the custom lightbox element - $lightboxRaw = $medium->lightboxRaw(); + + $attributes = $data['a_attributes']; + $attributes['href'] = $data['a_href']; + $element = array( 'name' => 'a', - 'attributes' => array('rel' => $lightboxRaw['a_rel'], 'href' => $lightboxRaw['a_url'], 'data-srcset' => $lightboxRaw['a_srcset']), + 'attributes' => $attributes, 'handler' => 'element', 'text' => array( 'name' => 'img', 'attributes' => array( - 'src' => $lightboxRaw['img_url'], - 'srcset' => $lightboxRaw['img_srcset'], + 'src' => $data['img_src'], + 'srcset' => $data['img_srcset'], 'sizes' => '100vw', 'alt' => $alt, 'title' => $title diff --git a/system/src/Grav/Common/Page/Medium.php b/system/src/Grav/Common/Page/Medium.php index aafdd1a21..31f49e99b 100644 --- a/system/src/Grav/Common/Page/Medium.php +++ b/system/src/Grav/Common/Page/Medium.php @@ -50,7 +50,12 @@ class Medium extends Data protected $type = 'guess'; protected $quality = 85; - public static $valid_actions = ['resize', 'forceResize', 'cropResize', 'crop', 'cropZoom', + public static $valid_actions = [ + // Medium functions + 'format', 'lightbox', 'link', 'reset', + + // Gregwar Image functions + 'resize', 'forceResize', 'cropResize', 'crop', 'cropZoom', 'negate', 'brightness', 'contrast', 'grayscale', 'emboss', 'smooth', 'sharp', 'edge', 'colorize', 'sepia' ]; public static $size_param_actions = [ @@ -85,7 +90,7 @@ class Medium extends Data /** * @var string */ - protected $linkAttributes; + protected $linkAttributes = []; public function __construct($items = array(), Blueprint $blueprint = null) { @@ -141,17 +146,6 @@ class Medium extends Data return $output; } - /** - * Sets the quality of the image - * @param Int $quality 0-100 quality - * @return Medium - */ - public function quality($quality) - { - $this->quality = $quality; - return $this; - } - /** * Return URL to file. * @@ -170,6 +164,7 @@ class Medium extends Data return self::$grav['base_url'] . '/'. $output; } + /** * Return srcset string for this Medium and its alternatives @@ -187,24 +182,6 @@ class Medium extends Data return implode(', ', $srcset); } - /** - * Sets image output format. - * - * @param string $type - * @param int $quality - * @return $this - */ - public function format($type = null, $quality = 80) - { - if (!$this->image) { - $this->image(); - } - - $this->type = $type; - $this->quality = $quality; - return $this; - } - /** * Returns tag from the medium. * @@ -234,64 +211,88 @@ class Medium extends Data * @param int $quality * @return string */ - public function html($title = null, $class = null, $type = null, $quality = 80, $reset = true) + public function html($title = null, $class = null, $reset = true) { + $data = $this->htmlRaw($title, $class, $reset); + $title = $title ? $title : $this->get('title'); $class = $class ? $class : ''; if ($this->image) { - if ($type) $this->type = $type; - if ($quality) $this->quality = $quality; - - $url = $this->url(false); - $srcset = $this->srcset($reset); - - $output = '' . $title . ''; + $output = '' . $title . ''; } else { - $output = $title; + $output = $data['text']; + } + + if (isset($data['a_href'])) { + + $attributes = ''; + foreach ($data['a_attributes'] as $prop => $value) { + $attributes .= " {$prop}=\"{$value}\""; + } + + $output = '' . $output . ''; + } + + return $output; + } + + public function htmlRaw($reset = true) + { + $output = []; + + if ($this->image) { + $output['img_src'] = $this->url(false); + $output['img_srcset'] = $this->srcset($reset); + } else { + $output['text'] = $title; } if ($this->linkTarget) { /** @var Config $config */ $config = self::$grav['config']; - $output = 'linkAttributes. ' class="'. $class . '">' . $output . ''; - - $this->linkTarget = $this->linkAttributes = null; + $output['a_href'] = rtrim(self::$grav['base_url'], '/') . '/'. ltrim($this->linkTarget, '/'); + $output['a_attributes'] = $this->linkAttributes; + + $this->linkTarget = null; + $this->linkAttributes = []; } return $output; } /** - * Return lightbox HTML for the medium. - * - * @param int $width - * @param int $height - * @return $this + * Sets the quality of the image + * @param Int $quality 0-100 quality + * @return Medium */ - public function lightbox($width = null, $height = null) + public function quality($quality) { - $this->linkAttributes = ' rel="lightbox" data-srcset="' . $this->srcset(false) . '"'; - - return $this->link($width, $height); - } - - public function lightboxRaw($width = null, $height = null, $reset = true) - { - $url = $this->url(false); - $srcset = $this->srcset($reset); - - $this->link($width, $height); - $lightbox_url = $this->linkTarget; - $lightbox_srcset = $this->linkSrcset; - - return array('a_url' => $lightbox_url, 'a_srcset' => $lightbox_srcset, 'a_rel' => 'lightbox', 'img_url' => $url, 'img_srcset' => $srcset); + $this->quality = $quality; + return $this; } /** - * Return link HTML for the medium. + * Sets image output format. + * + * @param string $type + * @param int $quality + * @return $this + */ + public function format($type = null, $quality = 80) + { + if (!$this->image) { + $this->image(); + } + + $this->type = $type; + $this->quality = $quality; + return $this; + } + + /** + * Enable link for the medium object * * @param int $width * @param int $height @@ -305,7 +306,7 @@ class Medium extends Data $medium->cropResize($width, $height); } $this->linkTarget = $medium->url(false); - $this->linkSrcset = $medium->srcset(); + $this->linkAttributes['data-srcset'] = $medium->srcset(); } else { // TODO: we need to find out URI in a bit better way. $relPath = preg_replace('|^' . ROOT_DIR . '|', '', $this->get('path')); @@ -315,6 +316,20 @@ class Medium extends Data return $this; } + /** + * Enable lightbox for the medium. + * + * @param int $width + * @param int $height + * @return $this + */ + public function lightbox($width = null, $height = null) + { + $this->linkAttributes['rel'] = 'lightbox'; + + return $this->link($width, $height); + } + /** * Reset image. *