/** * Build link with active definition in listing * @param Dom $dom * @param array $item * @param bool $orderActiveLink * @return string */ private static function buildLink($dom, $item, $orderActiveLink = false) { // set default link data - text and properties $text = self::applyEscape($item['text'], $item['html'], $item['!secure']); $properties = $item['property']; // try to parse link format for controller/action definition (must be array: 'main/index' to ['main/index']) if (!Obj::isArray($item['link']) && !Str::startsWith('http', $item['link']) && !Str::startsWith('#', $item['link'])) { $item['link'] = [$item['link']]; } // if its a controller/action definition try to work with active class if (Obj::isArray($item['link'])) { // check if css class for active item is defined if (!isset($item['activeClass'])) { $item['activeClass'] = 'active'; } // check if element is active on current URI if (self::isCurrentLink($item['link'], $item['activeOn'], $orderActiveLink) === true) { $properties['class'] = Str::concat(' ', $item['activeClass'], $properties['class']); } } // set href source for link $item['linkProperty']['href'] = self::convertLink($item['link']); // build output <li@params><a @params>@text</li> return $dom->li(function () use($dom, $text, $item) { return $dom->a(function () use($text) { return $text; }, $item['linkProperty']); }, $properties); }