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',
|
* 'id' => 'myModal',
|
||||||
* 'header' => 'Modal Heading',
|
* 'header' => 'Modal Heading',
|
||||||
* 'content' => '<p>One fine body...</p>',
|
* '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(
|
* 'buttonOptions' => array(
|
||||||
* 'label' => 'Show Modal',
|
* '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('role', 'dialog');
|
||||||
$this->defaultOption('tabindex', '-1');
|
$this->defaultOption('tabindex', '-1');
|
||||||
|
|
||||||
$this->addOption('class', 'modal');
|
$this->addClassName('modal');
|
||||||
$this->addOption('class', 'hide');
|
$this->addClassName('hide');
|
||||||
|
|
||||||
if ($this->fade)
|
if ($this->fade)
|
||||||
$this->addOption('class', 'fade');
|
$this->addClassName('fade');
|
||||||
|
|
||||||
$this->initPluginOptions();
|
$this->initPluginOptions();
|
||||||
$this->initPluginEvents();
|
$this->initPluginEvents();
|
||||||
@@ -243,7 +244,7 @@ class Modal extends Widget
|
|||||||
echo Html::beginTag('div', array('class'=>'modal-header'));
|
echo Html::beginTag('div', array('class'=>'modal-header'));
|
||||||
if ($this->closeText)
|
if ($this->closeText)
|
||||||
echo Html::button($this->closeText, null, null, array('data-dismiss' => 'modal', 'class'=>'close'));
|
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');
|
echo Html::endTag('div');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,7 +254,7 @@ class Modal extends Widget
|
|||||||
public function renderModalBody()
|
public function renderModalBody()
|
||||||
{
|
{
|
||||||
echo Html::beginTag('div', array('class'=>'modal-body'));
|
echo Html::beginTag('div', array('class'=>'modal-body'));
|
||||||
echo $this->renderSection($this->content);
|
echo $this->content;
|
||||||
echo Html::endTag('div');
|
echo Html::endTag('div');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,37 +265,22 @@ class Modal extends Widget
|
|||||||
{
|
{
|
||||||
|
|
||||||
echo Html::beginTag('div', array('class'=>'modal-footer'));
|
echo Html::beginTag('div', array('class'=>'modal-footer'));
|
||||||
echo $this->renderSection($this->footer);
|
echo $this->footer;
|
||||||
echo Html::endTag('div');
|
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
|
* Registers client scripts
|
||||||
*/
|
*/
|
||||||
public function registerScript()
|
public function registerScript()
|
||||||
{
|
{
|
||||||
$id = '#' . ArrayHelper::getValue($this->options, 'id');
|
|
||||||
// do we render a button? If so, bootstrap will handle its behavior through its
|
// do we render a button? If so, bootstrap will handle its behavior through its
|
||||||
// mark-up, otherwise, register the plugin.
|
// mark-up, otherwise, register the plugin.
|
||||||
if(empty($this->buttonOptions))
|
if(empty($this->buttonOptions))
|
||||||
$this->registerPlugin($id, $this->pluginOptions);
|
$this->registerPlugin('modal', $this->pluginOptions);
|
||||||
|
|
||||||
// register events
|
// register events
|
||||||
$this->registerEvents($id, $this->events);
|
$this->registerEvents($this->events);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -30,11 +30,6 @@ class Widget extends \yii\base\Widget
|
|||||||
*/
|
*/
|
||||||
public $options = array();
|
public $options = array();
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string the widget name (ie. modal, typeahead, tab)
|
|
||||||
*/
|
|
||||||
protected $name;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the widget.
|
* Initializes the widget.
|
||||||
*/
|
*/
|
||||||
@@ -48,11 +43,10 @@ class Widget extends \yii\base\Widget
|
|||||||
* Registers plugin events with the API.
|
* Registers plugin events with the API.
|
||||||
* @param string $selector the CSS selector.
|
* @param string $selector the CSS selector.
|
||||||
* @param string[] $events the JavaScript event configuration (name=>handler).
|
* @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.
|
* @return boolean whether the events were registered.
|
||||||
* @todo To be discussed
|
* @todo To be discussed
|
||||||
*/
|
*/
|
||||||
protected function registerEvents($selector, $events = array(), $position = View::POS_END)
|
protected function registerEvents($selector, $events = array())
|
||||||
{
|
{
|
||||||
if (empty($events))
|
if (empty($events))
|
||||||
return;
|
return;
|
||||||
@@ -63,24 +57,24 @@ class Widget extends \yii\base\Widget
|
|||||||
? $handler
|
? $handler
|
||||||
: new JsExpression($handler);
|
: new JsExpression($handler);
|
||||||
|
|
||||||
$script .= ";jQuery(document).ready(function (){jQuery('{$selector}').on('{$name}', {$handler});});";
|
$script .= ";jQuery('{$selector}').on('{$name}', {$handler});";
|
||||||
}
|
}
|
||||||
if (!empty($script))
|
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.
|
* 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 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) : '';
|
$options = !empty($options) ? Json::encode($options) : '';
|
||||||
$script = ";jQuery(document).ready(function (){jQuery('{$selector}').{$this->name}({$options});});";
|
$script = ";jQuery('{$selector}').{$name}({$options});";
|
||||||
$this->view->registerJs($script, array('position' => $position));
|
$this->view->registerJs($script);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -89,31 +83,28 @@ class Widget extends \yii\base\Widget
|
|||||||
*/
|
*/
|
||||||
public function registerBundle($responsive = false)
|
public function registerBundle($responsive = false)
|
||||||
{
|
{
|
||||||
$bundle = $responsive ? 'yii/bootstrap' : 'yii/bootstrap-responsive';
|
$bundle = $responsive ? 'yii/bootstrap-responsive' : 'yii/bootstrap';
|
||||||
|
|
||||||
$this->view->registerAssetBundle($bundle);
|
$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
|
* Adds a new class to options. If the class key does not exists, it will create one, if it exists it will append
|
||||||
* and also makes sure the uniqueness of them.
|
* the value and also makes sure the uniqueness of them.
|
||||||
*
|
*
|
||||||
* @param string $key
|
* @param string $class
|
||||||
* @param mixed $value
|
|
||||||
* @param string $glue
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function addOption($key, $value, $glue = ' ')
|
protected function addClassName($class)
|
||||||
{
|
{
|
||||||
if (isset($this->options[$key])) {
|
if (isset($this->options['class'])) {
|
||||||
if (!is_array($this->options[$key]))
|
if (!is_array($this->options['class']))
|
||||||
$this->options[$key] = explode($glue, $this->options[$key]);
|
$this->options['class'] = explode(' ', $this->options['class']);
|
||||||
$this->options[$key][] = $value;
|
$this->options['class'][] = $class;
|
||||||
$this->options[$key] = array_unique($this->options[$key]);
|
$this->options['class'] = array_unique($this->options['class']);
|
||||||
$this->options[$key] = implode($glue, $this->options[$key]);
|
$this->options['class'] = implode(' ', $this->options['class']);
|
||||||
} else
|
} else
|
||||||
$this->options[$key] = $value;
|
$this->options['class'] = $class;
|
||||||
return $this->options;
|
return $this->options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user