From 520e5b954ad85d326fd196c946213334bffab52c Mon Sep 17 00:00:00 2001 From: Antonio Ramirez Date: Mon, 20 May 2013 08:19:22 +0200 Subject: [PATCH] refactored code after feedback --- yii/bootstrap/Modal.php | 36 +++++++++++------------------------ yii/bootstrap/Widget.php | 49 ++++++++++++++++++++---------------------------- 2 files changed, 31 insertions(+), 54 deletions(-) diff --git a/yii/bootstrap/Modal.php b/yii/bootstrap/Modal.php index 601525c..5e287c5 100644 --- a/yii/bootstrap/Modal.php +++ b/yii/bootstrap/Modal.php @@ -21,10 +21,11 @@ use yii\helpers\ArrayHelper; * 'id' => 'myModal', * 'header' => 'Modal Heading', * 'content' => '

One fine body...

', - * '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); } } \ No newline at end of file diff --git a/yii/bootstrap/Widget.php b/yii/bootstrap/Widget.php index 2995afa..c50349f 100644 --- a/yii/bootstrap/Widget.php +++ b/yii/bootstrap/Widget.php @@ -31,11 +31,6 @@ class Widget extends \yii\base\Widget public $options = array(); /** - * @var string the widget name (ie. modal, typeahead, tab) - */ - protected $name; - - /** * Initializes the widget. */ public function init() @@ -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; }