li

    public function li()
    {
        return _class('html')->li([
            'name 1',
            [
                'name' => 'My name 2',
            ],
            [
                'name' => 'My name 3',
                'link' => url('/@object/@action/@id/3'),
            ],
        ]);
    }
    public function li($data = [], $extra = [])
    {
        $extra['id'] = ($extra['id'] ?? null) ?: __FUNCTION__ . '_' . ($this->_ids[__FUNCTION__] = ($this->_ids[__FUNCTION__] ?? 0) + 1);
        $items = [];
        foreach ((array) $data as $v) {
            if ( ! is_array($v)) {
                $body = $v;
                $v = [];
            } else {
                $body = ($v['body'] ?? null) ?: ($v['name'] ?? null);
            }
            if ( ! strlen((string) $body)) {
                continue;
            }
            $class_item = ($v['class'] ?? null) ?: ($extra['class_item'] ?? null);
            $badge = ($v['badge'] ?? null) ? ' <sup class="badge badge-' . (($v['class_badge'] ?? null) ?: 'info') . '">' . ($v['badge'] ?? null) . '</sup>' : '';
            $items[] = '<li class="' . ($class_item ? ' ' . $class_item : '') . '"' . (($v['id'] ?? null) ? ' id="' . ($v['id'] ?? null) . '"' : '') . '>' . $badge . (($v['link'] ?? null) ? '<a href="' . ($v['link'] ?? null) . '">' . $body . '</a>' : $body) . '</li>';
            if (is_array(($v['sub'] ?? null))) {
                $items[] = $this->li(($v['sub'] ?? null), $extra);
                continue;
            }
        }
        return '<ul' . _attrs($extra, ['id', 'class', 'style']) . '>' . implode(PHP_EOL, (array) $items) . '</ul>';
    }