mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-16 22:39:52 +08:00
refactored code after feedback
This commit is contained in:
@@ -21,10 +21,11 @@ use yii\helpers\ArrayHelper;
|
||||
* 'id' => 'myModal',
|
||||
* 'header' => 'Modal Heading',
|
||||
* 'content' => '<p>One fine body...</p>',
|
||||
* 'footer' => '//modal/_footer', // we can also use view paths
|
||||
* 'footer' => 'Modal Footer',
|
||||
* // if we wish to display a modal button
|
||||
* 'buttonOptions' => array(
|
||||
* 'label' => 'Show Modal',
|
||||
* 'class' => \yii\bootstrap\enum\Button::TYPE_DEFAULT
|
||||
* 'class' => 'btn btn-primary'
|
||||
* )
|
||||
* ));
|
||||
* ```
|
||||
@@ -139,11 +140,11 @@ class Modal extends Widget
|
||||
$this->defaultOption('role', 'dialog');
|
||||
$this->defaultOption('tabindex', '-1');
|
||||
|
||||
$this->addOption('class', 'modal');
|
||||
$this->addOption('class', 'hide');
|
||||
$this->addClassName('modal');
|
||||
$this->addClassName('hide');
|
||||
|
||||
if ($this->fade)
|
||||
$this->addOption('class', 'fade');
|
||||
$this->addClassName('fade');
|
||||
|
||||
$this->initPluginOptions();
|
||||
$this->initPluginEvents();
|
||||
@@ -243,7 +244,7 @@ class Modal extends Widget
|
||||
echo Html::beginTag('div', array('class'=>'modal-header'));
|
||||
if ($this->closeText)
|
||||
echo Html::button($this->closeText, null, null, array('data-dismiss' => 'modal', 'class'=>'close'));
|
||||
echo $this->renderSection($this->header);
|
||||
echo $this->header;
|
||||
echo Html::endTag('div');
|
||||
}
|
||||
|
||||
@@ -253,7 +254,7 @@ class Modal extends Widget
|
||||
public function renderModalBody()
|
||||
{
|
||||
echo Html::beginTag('div', array('class'=>'modal-body'));
|
||||
echo $this->renderSection($this->content);
|
||||
echo $this->content;
|
||||
echo Html::endTag('div');
|
||||
}
|
||||
|
||||
@@ -264,37 +265,22 @@ class Modal extends Widget
|
||||
{
|
||||
|
||||
echo Html::beginTag('div', array('class'=>'modal-footer'));
|
||||
echo $this->renderSection($this->footer);
|
||||
echo $this->footer;
|
||||
echo Html::endTag('div');
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a section. If the section is a view file, the returned string will be the contents of the view file,
|
||||
* otherwise, it will return the string in the $section variable.
|
||||
* @param string $section
|
||||
* @return string
|
||||
*/
|
||||
public function renderSection($section)
|
||||
{
|
||||
$viewFile = Yii::getAlias($section);
|
||||
if (is_file($viewFile))
|
||||
return $this->view->renderFile($viewFile, array(), $this);
|
||||
return $section;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers client scripts
|
||||
*/
|
||||
public function registerScript()
|
||||
{
|
||||
$id = '#' . ArrayHelper::getValue($this->options, 'id');
|
||||
// do we render a button? If so, bootstrap will handle its behavior through its
|
||||
// mark-up, otherwise, register the plugin.
|
||||
if(empty($this->buttonOptions))
|
||||
$this->registerPlugin($id, $this->pluginOptions);
|
||||
$this->registerPlugin('modal', $this->pluginOptions);
|
||||
|
||||
// register events
|
||||
$this->registerEvents($id, $this->events);
|
||||
$this->registerEvents($this->events);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -30,11 +30,6 @@ class Widget extends \yii\base\Widget
|
||||
*/
|
||||
public $options = array();
|
||||
|
||||
/**
|
||||
* @var string the widget name (ie. modal, typeahead, tab)
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
/**
|
||||
* Initializes the widget.
|
||||
*/
|
||||
@@ -48,11 +43,10 @@ class Widget extends \yii\base\Widget
|
||||
* Registers plugin events with the API.
|
||||
* @param string $selector the CSS selector.
|
||||
* @param string[] $events the JavaScript event configuration (name=>handler).
|
||||
* @param int $position the position of the JavaScript code.
|
||||
* @return boolean whether the events were registered.
|
||||
* @todo To be discussed
|
||||
*/
|
||||
protected function registerEvents($selector, $events = array(), $position = View::POS_END)
|
||||
protected function registerEvents($selector, $events = array())
|
||||
{
|
||||
if (empty($events))
|
||||
return;
|
||||
@@ -63,24 +57,24 @@ class Widget extends \yii\base\Widget
|
||||
? $handler
|
||||
: new JsExpression($handler);
|
||||
|
||||
$script .= ";jQuery(document).ready(function (){jQuery('{$selector}').on('{$name}', {$handler});});";
|
||||
$script .= ";jQuery('{$selector}').on('{$name}', {$handler});";
|
||||
}
|
||||
if (!empty($script))
|
||||
$this->view->registerJs($script, array('position' => $position));
|
||||
$this->view->registerJs($script);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a specific Bootstrap plugin using the given selector and options.
|
||||
*
|
||||
* @param string $selector the CSS selector
|
||||
* @param string $name the name of the javascript widget to initialize
|
||||
* @param array $options the Javascript options for the plugin
|
||||
* @param int $position the position of the JavaScript code
|
||||
*/
|
||||
public function registerPlugin($selector, $options = array(), $position = View::POS_END)
|
||||
public function registerPlugin($name, $options = array())
|
||||
{
|
||||
$selector = '#' . ArrayHelper::getValue($this->options, 'id');
|
||||
$options = !empty($options) ? Json::encode($options) : '';
|
||||
$script = ";jQuery(document).ready(function (){jQuery('{$selector}').{$this->name}({$options});});";
|
||||
$this->view->registerJs($script, array('position' => $position));
|
||||
$script = ";jQuery('{$selector}').{$name}({$options});";
|
||||
$this->view->registerJs($script);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -89,31 +83,28 @@ class Widget extends \yii\base\Widget
|
||||
*/
|
||||
public function registerBundle($responsive = false)
|
||||
{
|
||||
$bundle = $responsive ? 'yii/bootstrap' : 'yii/bootstrap-responsive';
|
||||
|
||||
$bundle = $responsive ? 'yii/bootstrap-responsive' : 'yii/bootstrap';
|
||||
$this->view->registerAssetBundle($bundle);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds a new option. If the key does not exists, it will create one, if it exists it will append the value
|
||||
* and also makes sure the uniqueness of them.
|
||||
* Adds a new class to options. If the class key does not exists, it will create one, if it exists it will append
|
||||
* the value and also makes sure the uniqueness of them.
|
||||
*
|
||||
* @param string $key
|
||||
* @param mixed $value
|
||||
* @param string $glue
|
||||
* @param string $class
|
||||
* @return array
|
||||
*/
|
||||
protected function addOption($key, $value, $glue = ' ')
|
||||
protected function addClassName($class)
|
||||
{
|
||||
if (isset($this->options[$key])) {
|
||||
if (!is_array($this->options[$key]))
|
||||
$this->options[$key] = explode($glue, $this->options[$key]);
|
||||
$this->options[$key][] = $value;
|
||||
$this->options[$key] = array_unique($this->options[$key]);
|
||||
$this->options[$key] = implode($glue, $this->options[$key]);
|
||||
if (isset($this->options['class'])) {
|
||||
if (!is_array($this->options['class']))
|
||||
$this->options['class'] = explode(' ', $this->options['class']);
|
||||
$this->options['class'][] = $class;
|
||||
$this->options['class'] = array_unique($this->options['class']);
|
||||
$this->options['class'] = implode(' ', $this->options['class']);
|
||||
} else
|
||||
$this->options[$key] = $value;
|
||||
$this->options['class'] = $class;
|
||||
return $this->options;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user