public static function carousel(array $items, $htmlOptions = array())
{
if (!empty($items)) {
$id = TbArray::getValue('id', $htmlOptions, parent::ID_PREFIX . parent::$count++);
TbArray::defaultValue('id', $id, $htmlOptions);
$selector = '#' . $id;
self::addCssClass('carousel', $htmlOptions);
if (TbArray::popValue('slide', $htmlOptions, true)) {
self::addCssClass('slide', $htmlOptions);
}
$interval = TbArray::popValue('data-interval', $htmlOptions);
if ($interval) {
$htmlOptions['data-interval'] = $interval;
}
$pause = TbArray::popValue('data-pause', $htmlOptions);
if ($pause) {
$htmlOptions['data-pause'] = $pause;
}
$indicatorOptions = TbArray::popValue('indicatorOptions', $htmlOptions, array());
$innerOptions = TbArray::popValue('innerOptions', $htmlOptions, array());
self::addCssClass('carousel-inner', $innerOptions);
$prevOptions = TbArray::popValue('prevOptions', $htmlOptions, array());
$prevLabel = TbArray::popValue('label', $prevOptions, '‹');
$nextOptions = TbArray::popValue('nextOptions', $htmlOptions, array());
$nextLabel = TbArray::popValue('label', $nextOptions, '›');
$hidePrevAndNext = TbArray::popValue('hidePrevAndNext', $htmlOptions, false);
$output = self::openTag('div', $htmlOptions);
$output .= self::carouselIndicators($selector, count($items), $indicatorOptions);
$output .= self::openTag('div', $innerOptions);
foreach ($items as $i => $itemOptions) {
if (isset($itemOptions['visible']) && $itemOptions['visible'] === false) {
continue;
}
if ($i === 0) {
// first item should be active
self::addCssClass('active', $itemOptions);
}
$content = TbArray::popValue('content', $itemOptions, '');
$image = TbArray::popValue('image', $itemOptions, '');
$imageOptions = TbArray::popValue('imageOptions', $itemOptions, array());
$imageAlt = TbArray::popValue('alt', $imageOptions, '');
if (!empty($image)) {
$content = parent::image($image, $imageAlt, $imageOptions);
}
$label = TbArray::popValue('label', $itemOptions);
$caption = TbArray::popValue('caption', $itemOptions);
$output .= self::carouselItem($content, $label, $caption, $itemOptions);
}
$output .= '</div>';
if (!$hidePrevAndNext) {
$output .= self::carouselPrevLink($prevLabel, $selector, $prevOptions);
$output .= self::carouselNextLink($nextLabel, $selector, $nextOptions);
}
$output .= '</div>';
return $output;
}
return '';
}