%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/ui/icon/widgets/
Upload File :
Create Path :
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/ui/icon/widgets/Icon.php

<?php

namespace humhub\modules\ui\icon\widgets;

use humhub\components\Widget;
use humhub\modules\ui\Module;
use Yii;
use humhub\libs\Html;
use humhub\modules\ui\icon\components\IconProvider;
use humhub\modules\ui\icon\components\IconFactory;

/**
 * The Icon widget is used as abstraction layer for rendering icons.
 *
 * This class only holds the icon definition as icon name, size and color and will forward the
 * actual rendering to an IconProvider through an IconFactory.
 *
 * It is possible to define own IconProvider, see [[IconFactory]]
 *
 * Usage:
 *
 * ```php
 * // Simple Icon
 * Icon::get('myIcon');
 *
 * // Icon with color definition
 * Icon::get('myIcon', ['color' => 'danger']);
 *
 * // Use another icon lib
 * Icon::get('myIcon', ['lib' => 'myIconLib']);
 * ```
 *
 * @see IconFactory
 * @see IconProvider
 * @since 1.4
 */
class Icon extends Widget
{
    const SIZE_XS = 'xs';
    const SIZE_SM = 'sm';
    const SIZE_LG = 'lg';
    const SIZE_2x = '2x';
    const SIZE_3x = '3x';
    const SIZE_4x = '4x';
    const SIZE_5x = '5x';
    const SIZE_6x = '6x';
    const SIZE_7x = '7x';
    const SIZE_8x = '8x';
    const SIZE_9x = '9x';
    const SIZE_10x = '10x';

    /**
     * @var array contains all available names which should be supported by the main icon provider
     */
    public static $names = [
        'adjust',
        'adn',
        'align-center',
        'align-justify',
        'align-left',
        'align-right',
        'ambulance',
        'anchor',
        'android',
        'angellist',
        'angle-double-down',
        'angle-double-left',
        'angle-double-right',
        'angle-double-up',
        'angle-down',
        'angle-left',
        'angle-right',
        'angle-up',
        'apple',
        'archive',
        'area-chart',
        'arrow-circle-down',
        'arrow-circle-left',
        'arrow-circle-o-down',
        'arrow-circle-o-left',
        'arrow-circle-o-right',
        'arrow-circle-o-up',
        'arrow-circle-right',
        'arrow-circle-up',
        'arrow-down',
        'arrow-left',
        'arrow-right',
        'arrow-up',
        'arrows',
        'arrows-alt',
        'arrows-h',
        'arrows-v',
        'asterisk',
        'at',
        'backward',
        'ban',
        'bank',
        'bar-chart',
        'bar-chart-o',
        'barcode',
        'bars',
        'bed',
        'beer',
        'behance',
        'behance-square',
        'bell',
        'bell-o',
        'bell-slash',
        'bell-slash-o',
        'bicycle',
        'binoculars',
        'birthday-cake',
        'bitbucket',
        'bitbucket-square',
        'bitcoin',
        'bold',
        'bolt',
        'bomb',
        'book',
        'bookmark',
        'bookmark-o',
        'briefcase',
        'btc',
        'bug',
        'building',
        'building-o',
        'bullhorn',
        'bullseye',
        'bus',
        'buysellads',
        'cab',
        'calculator',
        'calendar',
        'calendar-o',
        'camera',
        'camera-retro',
        'car',
        'caret-down',
        'caret-left',
        'caret-right',
        'caret-square-o-down',
        'caret-square-o-left',
        'caret-square-o-right',
        'caret-square-o-up',
        'caret-up',
        'cart-arrow-down',
        'cart-plus',
        'cc',
        'cc-amex',
        'cc-discover',
        'cc-mastercard',
        'cc-paypal',
        'cc-stripe',
        'cc-visa',
        'certificate',
        'chain',
        'chain-broken',
        'check',
        'check-circle',
        'check-circle-o',
        'check-square',
        'check-square-o',
        'chevron-circle-down',
        'chevron-circle-left',
        'chevron-circle-right',
        'chevron-circle-up',
        'chevron-down',
        'chevron-left',
        'chevron-right',
        'chevron-up',
        'child',
        'circle',
        'circle-o',
        'circle-o-notch',
        'circle-thin',
        'clipboard',
        'clock-o',
        'close',
        'cloud',
        'cloud-download',
        'cloud-upload',
        'cny',
        'code',
        'code-fork',
        'codepen',
        'coffee',
        'cog',
        'cogs',
        'columns',
        'comment',
        'comment-o',
        'comments',
        'comments-o',
        'compass',
        'compress',
        'connectdevelop',
        'copy',
        'copyright',
        'credit-card',
        'crop',
        'crosshairs',
        'css3',
        'cube',
        'cubes',
        'cut',
        'cutlery',
        'dashboard',
        'dashcube',
        'database',
        'dedent',
        'delicious',
        'desktop',
        'deviantart',
        'diamond',
        'digg',
        'dollar',
        'dot-circle-o',
        'download',
        'dribbble',
        'dropbox',
        'drupal',
        'edit',
        'eject',
        'ellipsis-h',
        'ellipsis-v',
        'empire',
        'envelope',
        'envelope-o',
        'envelope-square',
        'eraser',
        'eur',
        'euro',
        'exchange',
        'exclamation',
        'exclamation-circle',
        'exclamation-triangle',
        'expand',
        'external-link',
        'external-link-square',
        'eye',
        'eye-slash',
        'eyedropper',
        'facebook',
        'facebook-f',
        'facebook-official',
        'facebook-square',
        'fast-backward',
        'fast-forward',
        'fax',
        'female',
        'fighter-jet',
        'file',
        'file-archive-o',
        'file-audio-o',
        'file-code-o',
        'file-excel-o',
        'file-image-o',
        'file-movie-o',
        'file-o',
        'file-pdf-o',
        'file-photo-o',
        'file-picture-o',
        'file-powerpoint-o',
        'file-sound-o',
        'file-text',
        'file-text-o',
        'file-video-o',
        'file-word-o',
        'file-zip-o',
        'files-o',
        'film',
        'filter',
        'fire',
        'fire-extinguisher',
        'flag',
        'flag-checkered',
        'flag-o',
        'flash',
        'flask',
        'flickr',
        'floppy-o',
        'folder',
        'folder-o',
        'folder-open',
        'folder-open-o',
        'font',
        'forumbee',
        'forward',
        'foursquare',
        'frown-o',
        'futbol-o',
        'gamepad',
        'gavel',
        'gbp',
        'ge',
        'gear',
        'gears',
        'genderless',
        'gift',
        'git',
        'git-square',
        'github',
        'github-alt',
        'github-square',
        'gittip',
        'glass',
        'globe',
        'google',
        'google-plus',
        'google-plus-square',
        'google-wallet',
        'graduation-cap',
        'gratipay',
        'group',
        'h-square',
        'hacker-news',
        'hand-o-down',
        'hand-o-left',
        'hand-o-right',
        'hand-o-up',
        'hdd-o',
        'header',
        'headphones',
        'heart',
        'heart-o',
        'heartbeat',
        'history',
        'home',
        'hospital-o',
        'hotel',
        'html5',
        'ils',
        'image',
        'inbox',
        'indent',
        'info',
        'info-circle',
        'inr',
        'instagram',
        'institution',
        'ioxhost',
        'italic',
        'joomla',
        'jpy',
        'jsfiddle',
        'key',
        'keyboard-o',
        'krw',
        'language',
        'laptop',
        'lastfm',
        'lastfm-square',
        'leaf',
        'leanpub',
        'legal',
        'lemon-o',
        'level-down',
        'level-up',
        'life-bouy',
        'life-buoy',
        'life-ring',
        'life-saver',
        'lightbulb-o',
        'line-chart',
        'link',
        'linkedin',
        'linkedin-square',
        'linux',
        'list',
        'list-alt',
        'list-ol',
        'list-ul',
        'location-arrow',
        'lock',
        'long-arrow-down',
        'long-arrow-left',
        'long-arrow-right',
        'long-arrow-up',
        'magic',
        'magnet',
        'mail-forward',
        'mail-reply',
        'mail-reply-all',
        'male',
        'map-marker',
        'mars',
        'mars-double',
        'mars-stroke',
        'mars-stroke-h',
        'mars-stroke-v',
        'maxcdn',
        'meanpath',
        'medium',
        'medkit',
        'meh-o',
        'mercury',
        'microphone',
        'microphone-slash',
        'minus',
        'minus-circle',
        'minus-square',
        'minus-square-o',
        'mobile',
        'mobile-phone',
        'money',
        'moon-o',
        'mortar-board',
        'motorcycle',
        'music',
        'navicon',
        'neuter',
        'newspaper-o',
        'openid',
        'outdent',
        'pagelines',
        'paint-brush',
        'paper-plane',
        'paper-plane-o',
        'paperclip',
        'paragraph',
        'paste',
        'pause',
        'paw',
        'paypal',
        'pencil',
        'pencil-square',
        'pencil-square-o',
        'phone',
        'phone-square',
        'photo',
        'picture-o',
        'pie-chart',
        'pied-piper',
        'pied-piper-alt',
        'pinterest',
        'pinterest-p',
        'pinterest-square',
        'plane',
        'play',
        'play-circle',
        'play-circle-o',
        'plug',
        'plus',
        'plus-circle',
        'plus-square',
        'plus-square-o',
        'power-off',
        'print',
        'puzzle-piece',
        'qq',
        'qrcode',
        'question',
        'question-circle',
        'quote-left',
        'quote-right',
        'ra',
        'random',
        'rebel',
        'recycle',
        'reddit',
        'reddit-square',
        'refresh',
        'remove',
        'renren',
        'reorder',
        'repeat',
        'reply',
        'reply-all',
        'retweet',
        'rmb',
        'road',
        'rocket',
        'rotate-left',
        'rotate-right',
        'rouble',
        'rss',
        'rss-square',
        'rub',
        'ruble',
        'rupee',
        'save',
        'scissors',
        'search',
        'search-minus',
        'search-plus',
        'sellsy',
        'send',
        'send-o',
        'server',
        'share',
        'share-alt',
        'share-alt-square',
        'share-square',
        'share-square-o',
        'shekel',
        'sheqel',
        'shield',
        'ship',
        'shirtsinbulk',
        'shopping-cart',
        'sign-in',
        'sign-out',
        'signal',
        'simplybuilt',
        'sitemap',
        'skyatlas',
        'skype',
        'slack',
        'sliders',
        'slideshare',
        'smile-o',
        'soccer-ball-o',
        'sort',
        'sort-alpha-asc',
        'sort-alpha-desc',
        'sort-amount-asc',
        'sort-amount-desc',
        'sort-asc',
        'sort-desc',
        'sort-down',
        'sort-numeric-asc',
        'sort-numeric-desc',
        'sort-up',
        'soundcloud',
        'space-shuttle',
        'spinner',
        'spoon',
        'spotify',
        'square',
        'square-o',
        'stack-exchange',
        'stack-overflow',
        'star',
        'star-half',
        'star-half-empty',
        'star-half-full',
        'star-half-o',
        'star-o',
        'steam',
        'steam-square',
        'step-backward',
        'step-forward',
        'stethoscope',
        'stop',
        'street-view',
        'strikethrough',
        'stumbleupon',
        'stumbleupon-circle',
        'subscript',
        'subway',
        'suitcase',
        'sun-o',
        'superscript',
        'support',
        'table',
        'tablet',
        'tachometer',
        'tag',
        'tags',
        'tasks',
        'taxi',
        'tencent-weibo',
        'terminal',
        'text-height',
        'text-width',
        'th',
        'th-large',
        'th-list',
        'thumb-tack',
        'thumbs-down',
        'thumbs-o-down',
        'thumbs-o-up',
        'thumbs-up',
        'ticket',
        'times',
        'times-circle',
        'times-circle-o',
        'tint',
        'toggle-off',
        'toggle-on',
        'train',
        'transgender',
        'transgender-alt',
        'trash',
        'trash-o',
        'tree',
        'trello',
        'trophy',
        'truck',
        'try',
        'tty',
        'tumblr',
        'tumblr-square',
        'twitch',
        'twitter',
        'twitter-square',
        'umbrella',
        'underline',
        'undo',
        'university',
        'unlock',
        'unlock-alt',
        'upload',
        'usd',
        'user',
        'user-md',
        'user-plus',
        'user-secret',
        'user-times',
        'users',
        'venus',
        'venus-double',
        'venus-mars',
        'viacoin',
        'video-camera',
        'vimeo-square',
        'vine',
        'vk',
        'volume-down',
        'volume-off',
        'volume-up',
        'weibo',
        'weixin',
        'whatsapp',
        'wheelchair',
        'wifi',
        'windows',
        'wordpress',
        'wrench',
        'xing',
        'xing-square',
        'yahoo',
        'yelp',
        'youtube',
        'youtube-play',
        'youtube-square'
    ];

    /**
     * @var string icon name
     */
    public $name;

    /**
     * @var int icon size in pixel
     */
    public $size;

    /**
     * @var bool right float
     */
    public $right = false;

    /**
     * @var bool left float
     */
    public $left = false;

    /**
     * @var bool used to vertical alignment of icons;
     */
    public $fixedWidth = false;

    /**
     * @var bool used for icon list items
     */
    public $listItem = false;

    /**
     * @var bool bordered icon
     */
    public $border = false;

    /**
     * Set this to true if the icon is only used for decoration and is not required for navigating your site.
     * @var bool used for accessibility, set this to true if the icon is just used as decoration and
     */
    public $ariaHidden = false;

    /**
     * @var string aria-label
     * @var since 1.7
     */
    public $ariaLabel;

    /**
     * @var array
     */
    public $htmlOptions = [];

    /**
     * @var string css color
     */
    public $color;

    /**
     * @var string a tooltip text
     * @since 1.7
     */
    public $tooltip;

    /**
     * @var string explicitly define a icon library, if not defined the default icon provider is used
     */
    public $lib;

    /**
     * Can be used to get an Icon instance from an unknown format.
     *
     * The following formats are  supported:
     *
     * ```php
     * // Will just return the given $instance
     * Icon::get($instance);
     *
     * // Will overwrite the instance configuration and return the given $instane
     * Icon::get($instance, $someOptions);
     *
     *
     * // Will create an instance with the given icon name and options
     * Icon::get('tasks', $someOptoins);
     *
     *
     * // Will create an instance from the given options array
     * Icon::get(['name' => 'tasks', color => 'success']);
     * ```
     * @param $icon
     * @param array $options
     * @return Icon|null|object
     */
    public static function get($icon, $options = [])
    {
        if ($icon instanceof static) {
            return Yii::configure($icon, $options);
        }

        if (is_string($icon)) {
            $options['name'] = $icon;
            return new Icon($options);
        }

        if (is_array($icon)) {
            return new Icon($icon);
        }

        return null;
    }

    /**
     * Returns all supported icon names of a provider-
     *
     * @param null $providerId
     * @return string[]
     * @throws \yii\base\InvalidConfigException
     * @see IconFactory::getNames()
     */
    public static function getNames($providerId = null)
    {
        return IconFactory::getInstance()->getNames($providerId);
    }

    /**
     * Renders a icon list e.g.:
     *
     * ```php
     * Icon::renderList([
     *     ['tasks' => 'First list item', 'options' => ['color' => 'success']],
     *     ['book' => 'First second item', 'options' => ['color' => 'danger']]
     * ])
     * ```
     *
     * @param $listDefinition
     * @return mixed
     * @throws \yii\base\InvalidConfigException
     */
    public static function renderList($listDefinition)
    {
        return IconFactory::getInstance()->renderList($listDefinition);
    }

    /**
     * @inheritdoc
     * @throws \yii\base\InvalidConfigException
     */
    public function run()
    {
        /**
         * Catch for legacy icon usage
         */
        $this->name = (strpos($this->name, 'fa-') === 0)
            ? substr($this->name, 3, strlen($this->name))
            : $this->name;

        if ($this->color) {
            switch ($this->color) {
                case 'default':
                    $this->color = $this->view->theme->variable('default');
                    break;
                case 'primary':
                    $this->color = $this->view->theme->variable('primary');
                    break;
                case 'info':
                    $this->color = $this->view->theme->variable('info');
                    break;
                case 'success':
                    $this->color = $this->view->theme->variable('success');
                    break;
                case 'warning':
                case 'warn':
                    $this->color = $this->view->theme->variable('warn');
                    break;

                case 'error':
                case 'danger':
                    $this->color = $this->view->theme->variable('danger');
                    break;

            }
        }

        if ($this->getId(false)) {
            $this->htmlOptions['id'] = $this->id;
        }

        $this->name = Module::getModuleInstance()->getIconAlias($this->name);

        return IconFactory::getInstance()->render($this);
    }

    /**
     * @param $size string
     * @return $this
     */
    public function size($size)
    {
        $this->size = $size;
        return $this;
    }

    /**
     * @param $size string
     * @return $this
     * @since 1.7
     */
    public function ariaLabel($ariaLabel)
    {
        $this->ariaLabel = $ariaLabel;
        return $this;
    }

    /**
     * @param string tooltip text
     * @param string $ariaLabel additional aria-label information (tooltip text is used as fallback)
     * @return $this
     * @since 1.7
     */
    public function tooltip($tooltip, $ariaLabel = null)
    {
        $this->tooltip = $tooltip;
        if ($ariaLabel) {
            $this->ariaLabel = $ariaLabel;
        } elseif (!$this->ariaLabel) {
            $this->ariaLabel = $tooltip;
        }
        return $this;
    }

    /**
     * @param bool $active
     * @return $this
     */
    public function fixedWith($active = true)
    {
        $this->fixedWidth = $active;
        return $this;
    }

    /**
     * @param bool $active
     * @return $this
     */
    public function listItem($active = true)
    {
        $this->listItem;
        return $this;
    }

    /**
     * @param bool $active
     * @return $this
     */
    public function right($active = true)
    {
        if ($active) {
            $this->left(false);
        }

        $this->right = $active;
        return $this;
    }

    /**
     * @param bool $active
     * @return $this
     */
    public function left($active = true)
    {
        if ($active) {
            $this->right(false);
        }

        $this->left = $active;
        return $this;
    }

    /**
     * @param bool $active
     * @deprecated since 1.7 this is automatically set since 1.7
     */
    public function ariaHidden($active = true)
    {
        $this->ariaHidden = $active;
        return $this;
    }

    /**
     * @param bool $active
     * @return $this
     */
    public function border($active = true)
    {
        $this->border = $active;
        return $this;
    }

    /**
     * @param string|array $style
     * @return $this
     */
    public function style($style)
    {
        Html::addCssStyle($this->htmlOptions, $style);
        return $this;
    }

    /**
     * @param string $color
     * @return $this
     */
    public function color($color)
    {
        $this->color = $color;
        return $this;
    }

    /**
     * @param $lib
     * @return $this
     */
    public function lib($lib)
    {
        $this->lib = $lib;
        return $this;
    }

    /**
     * @return [] array representation of this icon
     */
    public function asArray()
    {
        return [
            'id' => $this->getId(false),
            'name' => $this->name,
            'size' => $this->size,
            'fixedWidth' => $this->fixedWidth,
            'listItem' => $this->listItem,
            'right' => $this->right,
            'left' => $this->left,
            'tooltip' => $this->tooltip,
            'ariaLabel' => $this->ariaLabel,
            'border' => $this->border,
            'htmlOptions' => $this->htmlOptions,
            'color' => $this->color,
            'lib' => $this->lib
        ];
    }

    /**
     * @return string
     */
    public function asString()
    {
        try {
            return (string) $this;
        } catch (\Throwable $e) {
            Yii::error($e);
        }

        return '';
    }

    /**
     * @return string
     */
    public function __toString()
    {
        try {
            $result = $this::widget($this->asArray());
            return $result ?: '';
        } catch (\Throwable $e) {
            Yii::error($e);
        }

        return '';
    }
}

Zerion Mini Shell 1.0