Вход Регистрация
Файл: protected/extensions/widgets/imperavi/ImperaviRedactorWidget.php
Строк: 117
<?php
/**
 * ImperaviRedactorWidget class file.
 *
 * @property string $assetsPath
 * @property string $assetsUrl
 * @property array $plugins
 *
 * @author Veaceslav Medvedev <slavcopost@gmail.com>
 * @author Alexander Makarov <sam@rmcreative.ru>
 *
 * @version 1.2.14
 *
 * @link https://github.com/yiiext/imperavi-redactor-widget
 * @link http://imperavi.com/redactor
 * @license https://github.com/yiiext/imperavi-redactor-widget/blob/master/license.md
 */
class ImperaviRedactorWidget extends CInputWidget
{
    
/**
     * Assets package ID.
     */
    
const PACKAGE_ID 'imperavi-redactor';

    
/**
     * @var array {@link http://imperavi.com/redactor/docs/ redactor options}.
     */
    
public $options = array();

    
/**
     * @var string|null Selector pointing to textarea to initialize redactor for.
     * Defaults to null meaning that textarea does not exist yet and will be
     * rendered by this widget.
     */
    
public $selector;

    
/**
     * @var array
     */
    
public $package = array();

    
/**
     * @var array
     */
    
private $_plugins = array();

    
/**
     * Init widget.
     */
    
public function init()
    {
        
parent::init();

        if (
$this->selector === null) {
            list(
$this->name$this->id) = $this->resolveNameID();
            
$this->htmlOptions['id'] = $this->getId();
            
$this->selector '#' $this->getId();

            if (
$this->hasModel()) {
                echo 
CHtml::activeTextArea($this->model$this->attribute$this->htmlOptions);
            } else {
                echo 
CHtml::textArea($this->name$this->value$this->htmlOptions);
            }
        }

        
$this->registerClientScript();
    }

    
/**
     * Register CSS and Script.
     */
    
protected function registerClientScript()
    {
        
// Prepare script package.
        
$this->package array_merge(array(
                
'baseUrl' => $this->getAssetsUrl(),
                
'js' => array(
                    
YII_DEBUG 'redactor.js' 'redactor.min.js',
                ),
                
'css' => array(
                    
'redactor.css',
                ),
                
'depends' => array(
                    
'jquery',
                ),
            ), 
$this->package);

        
// Append language file to script package.
        
if (isset($this->options['lang']) && $this->options['lang'] !== 'en') {
            
$this->package['js'][] = 'lang/' $this->options['lang'] . '.js';
        }

        
// Add assets url to relative css.
        
if (isset($this->options['css'])) {
            if (!
is_array($this->options['css'])) {
                
$this->options['css'] = array($this->options['css']);
            }
            foreach (
$this->options['css'] as $i => $css) {
                if (
strpos($css'/') === false) {
                    
$this->options['css'][$i] = $this->getAssetsUrl() . '/' $css;
                }
            }
        }

        
// Insert plugins in options
        
if (!empty($this->_plugins)) {
            
$this->options['plugins'] = array_keys($this->_plugins);
        }

        
$clientScript Yii::app()->getClientScript();
        
$selector CJavaScript::encode($this->selector);
        
$options CJavaScript::encode($this->options);

        
$clientScript
            
->addPackage(self::PACKAGE_ID$this->package)
            ->
registerPackage(self::PACKAGE_ID)
            ->
registerScript(
                
$this->id,
                
'jQuery(' $selector ').redactor(' $options ');',
                
CClientScript::POS_READY
            
);

        foreach (
$this->getPlugins() as $id => $plugin) {
            
$clientScript
                
->addPackage(self::PACKAGE_ID '-' $id$plugin)
                ->
registerPackage(self::PACKAGE_ID '-' $id);
        }
    }

    
/**
     * Get the assets path.
     * @return string
     */
    
public function getAssetsPath()
    {
        return  
dirname(__FILE__) . '/assets';
    }

    
/**
     * Publish assets and return url.
     * @return string
     */
    
public function getAssetsUrl()
    {
        return 
Yii::app()->getAssetManager()->publish($this->getAssetsPath());
    }

    
/**
     * @param array $plugins
     */
    
public function setPlugins(array $plugins)
    {
        foreach (
$plugins as $id => $plugin) {
            if (!isset(
$plugin['baseUrl']) && !isset($plugin['basePath'])) {
                
$plugin['baseUrl'] = $this->getAssetsUrl() . '/plugins/' $id;
            }

            
$this->_plugins[$id] = $plugin;
        }
    }

    
/**
     * @return array
     */
    
public function getPlugins()
    {
        return 
$this->_plugins;
    }
}
Онлайн: 2
Реклама