/**
* @see Document\Tag\TagInterface::frontend
* @return string
*/
public function frontend()
{
if (!is_array($this->options)) {
$this->options = array();
}
$image = $this->getImage();
if ($image instanceof Asset) {
if (isset($this->options["thumbnail"]) && $this->options["thumbnail"] || $this->cropPercent) {
// create a thumbnail first
$autoName = false;
$thumbConfig = $image->getThumbnailConfig($this->options["thumbnail"]);
if (!$thumbConfig && $this->cropPercent) {
$thumbConfig = new Asset\Image\Thumbnail\Config();
}
if ($this->cropPercent) {
$cropConfig = array("width" => $this->cropWidth, "height" => $this->cropHeight, "y" => $this->cropTop, "x" => $this->cropLeft);
$thumbConfig->addItemAt(0, "cropPercent", $cropConfig);
// also crop media query specific configs
if ($thumbConfig->hasMedias()) {
foreach ($thumbConfig->getMedias() as $mediaName => $mediaItems) {
$thumbConfig->addItemAt(0, "cropPercent", $cropConfig, $mediaName);
}
}
$autoName = true;
}
if ($this->options["highResolution"] && $this->options["highResolution"] > 1) {
$thumbConfig->setHighResolution($this->options["highResolution"]);
}
// autogenerate a name for the thumbnail because it's different from the original
if ($autoName) {
$hash = md5(Serialize::serialize($thumbConfig->getItems()));
$thumbConfig->setName($thumbConfig->getName() . "_auto_" . $hash);
}
$imagePath = $image->getThumbnail($thumbConfig);
} else {
$imagePath = $image->getFullPath();
}
$altText = $this->alt;
$titleText = $this->alt;
if (empty($titleText)) {
if ($this->getImage()->getMetadata("title")) {
$titleText = $this->getImage()->getMetadata("title");
}
}
if (empty($altText)) {
if ($this->getImage()->getMetadata("alt")) {
$altText = $this->getImage()->getMetadata("alt");
} else {
$altText = $titleText;
}
}
// get copyright from asset
if ($this->getImage()->getMetadata("copyright")) {
if (!empty($altText)) {
$altText .= " | ";
}
if (!empty($titleText)) {
$titleText .= " | ";
}
$altText .= "© " . $this->getImage()->getMetadata("copyright");
$titleText .= "© " . $this->getImage()->getMetadata("copyright");
}
$defaultAttributes = array("alt" => $altText);
if (!empty($titleText)) {
$defaultAttributes["title"] = $titleText;
}
// add attributes to image
$allowedAttributes = array("alt", "align", "border", "height", "hspace", "ismap", "longdesc", "usemap", "vspace", "width", "class", "dir", "id", "lang", "style", "title", "xml:lang", "onmouseover", "onabort", "onclick", "ondblclick", "onmousedown", "onmousemove", "onmouseout", "onmouseup", "onkeydown", "onkeypress", "onkeyup", "itemprop", "itemscope", "itemtype", "disableWidthHeightAttributes");
$htmlEscapeAttributes = array("alt", "align", "border", "height", "hspace", "longdesc", "usemap", "vspace", "width", "class", "dir", "id", "lang", "title");
$customAttributes = array();
if (array_key_exists("attributes", $this->options) && is_array($this->options["attributes"])) {
$customAttributes = $this->options["attributes"];
}
$availableAttribs = array_merge($this->options, $defaultAttributes, $customAttributes);
$attribs = [];
$attribsRaw = [];
foreach ($availableAttribs as $key => $value) {
if ((is_string($value) || is_numeric($value) || is_bool($value)) && (in_array($key, $allowedAttributes) || array_key_exists($key, $customAttributes))) {
$attribsRaw[$key] = $value;
if (in_array($key, $htmlEscapeAttributes)) {
$value = htmlspecialchars($value);
}
$attribs[] = $key . '="' . $value . '"';
}
}
if ($imagePath instanceof Asset\Image\Thumbnail) {
// thumbnail's HTML is always generated by the thumbnail itself
return $imagePath->getHTML($attribsRaw);
} else {
return '<img src="' . $imagePath . '" ' . implode(" ", $attribs) . ' />';
}
}
}