public function toHtml($data)
    {
        if (!is_object($data) && !is_array($data)) {
            throw new \InvalidArgumentException('The $data parameter takes only an object or an array.');
        }

        $data = (array) $data;
        $type = (string) $data['type'];

        switch ($type) {
            case 'photo':
                if (empty($data['width']) || empty($data['height'])) {
                    return false;
                }
                // no break

            case 'link':
                if (empty($data['url']) || !$this->isSafeUrl($data['url'])) {
                    return false;
                }
                break;

            case 'video':
            case 'rich':
                if (empty($data['html']) || !$this->isSafeHtml($data['html'])) {
                    return false;
                }
                break;

            default:
                return false;
        }

        return $this->render($type, $data);
    }