diff --git a/yii/bootstrap/widgets/Modal.php b/yii/bootstrap/Modal.php similarity index 92% rename from yii/bootstrap/widgets/Modal.php rename to yii/bootstrap/Modal.php index 15e874b..601525c 100644 --- a/yii/bootstrap/widgets/Modal.php +++ b/yii/bootstrap/Modal.php @@ -5,13 +5,11 @@ * @license http://www.yiiframework.com/license/ */ -namespace yii\bootstrap\widgets; +namespace yii\bootstrap; use Yii; use yii\helpers\Html; use yii\helpers\ArrayHelper; -use yii\bootstrap\helpers\Button; -use yii\bootstrap\enum\Enum; /** * Modal renders a bootstrap modal on the page for its use on your application. @@ -34,7 +32,7 @@ use yii\bootstrap\enum\Enum; * @author Antonio Ramirez * @since 2.0 */ -class Modal extends base\Widget +class Modal extends Widget { /** * @var array The additional HTML attributes of the button that will show the modal. If empty array, only @@ -137,16 +135,15 @@ class Modal extends base\Widget $this->name = 'modal'; $this->defaultOption('id', $this->getId()); - $this->selector = '#' . ArrayHelper::getValue($this->options, 'id'); - $this->defaultOption('role', Enum::DIALOG); + $this->defaultOption('role', 'dialog'); $this->defaultOption('tabindex', '-1'); - $this->addOption('class', Enum::MODAL); - $this->addOption('class', Enum::HIDE); + $this->addOption('class', 'modal'); + $this->addOption('class', 'hide'); if ($this->fade) - $this->addOption('class', Enum::FADE); + $this->addOption('class', 'fade'); $this->initPluginOptions(); $this->initPluginEvents(); @@ -203,7 +200,7 @@ class Modal extends base\Widget $this->buttonOptions['data-toggle'] = isset($this->buttonOptions['data-toggle']) ? $this->buttonOptions['data-toggle'] - : Enum::MODAL; + : 'modal'; if ($this->remote !== null && !isset($this->buttonOptions['data-remote'])) $this->buttonOptions['data-remote'] = Html::url($this->remote); @@ -218,7 +215,7 @@ class Modal extends base\Widget $this->buttonOptions[$attr] = isset($this->buttonOptions[$attr]) ? $this->buttonOptions[$attr] - : $this->selector; + : '#' . ArrayHelper::getValue($this->options, 'id'); echo Html::button($label, $name, $value, $this->buttonOptions); } @@ -245,7 +242,7 @@ class Modal extends base\Widget { echo Html::beginTag('div', array('class'=>'modal-header')); if ($this->closeText) - echo Button::closeButton($this->closeText, Enum::MODAL); + echo Html::button($this->closeText, null, null, array('data-dismiss' => 'modal', 'class'=>'close')); echo $this->renderSection($this->header); echo Html::endTag('div'); } @@ -290,13 +287,14 @@ class Modal extends base\Widget */ 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($this->selector, $this->pluginOptions); + $this->registerPlugin($id, $this->pluginOptions); // register events - $this->registerEvents($this->selector, $this->events); + $this->registerEvents($id, $this->events); } } \ No newline at end of file diff --git a/yii/bootstrap/widgets/base/Widget.php b/yii/bootstrap/Widget.php similarity index 64% rename from yii/bootstrap/widgets/base/Widget.php rename to yii/bootstrap/Widget.php index 822f761..2995afa 100644 --- a/yii/bootstrap/widgets/base/Widget.php +++ b/yii/bootstrap/Widget.php @@ -5,13 +5,10 @@ * @license http://www.yiiframework.com/license/ */ -namespace yii\bootstrap\widgets\base; +namespace yii\bootstrap; use Yii; use yii\base\View; -use yii\bootstrap\helpers\Assets; -use yii\base\InvalidCallException; - /** @@ -26,7 +23,7 @@ class Widget extends \yii\base\Widget /** * @var bool whether to register the asset */ - public $responsive = true; + public static $responsive = true; /** * @var array the HTML attributes for the widget container tag. @@ -34,22 +31,17 @@ class Widget extends \yii\base\Widget public $options = array(); /** - * @var string the widget name + * @var string the widget name (ie. modal, typeahead, tab) */ protected $name; /** - * @var string the jQuery selector of the widget - */ - protected $selector; - - /** * Initializes the widget. */ public function init() { // ensure bundle - Assets::registerBundle($this->responsive); + $this->registerBundle(static::$responsive); } /** @@ -58,37 +50,51 @@ class Widget extends \yii\base\Widget * @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) { - Assets::registerEvents($selector, $events, $position); + if (empty($events)) + return; + + $script = ''; + foreach ($events as $name => $handler) { + $handler = ($handler instanceof JsExpression) + ? $handler + : new JsExpression($handler); + + $script .= ";jQuery(document).ready(function (){jQuery('{$selector}').on('{$name}', {$handler});});"; + } + if (!empty($script)) + $this->view->registerJs($script, array('position' => $position)); } /** * Registers a specific Bootstrap plugin using the given selector and options. - * @param string $selector the CSS selector. - * @param array $options the JavaScript options for the plugin. - * @param int $position the position of the JavaScript code. - * @throws \yii\base\InvalidCallException + * + * @param string $selector the CSS selector + * @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) { - if(null === $this->name) - throw new InvalidCallException(); - - Assets::registerPlugin($selector, $this->name, $options, $position); + $options = !empty($options) ? Json::encode($options) : ''; + $script = ";jQuery(document).ready(function (){jQuery('{$selector}').{$this->name}({$options});});"; + $this->view->registerJs($script, array('position' => $position)); } /** - * Generates a "somewhat" random id string. - * @return string the id. - * @todo not sure it should be here or + * Registers bootstrap bundle + * @param bool $responsive */ - protected function getUniqueScriptId() + public function registerBundle($responsive = false) { - return uniqid(time() . '#', true); + $bundle = $responsive ? 'yii/bootstrap' : 'yii/bootstrap-responsive'; + + $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. diff --git a/yii/bootstrap/enum/Enum.php b/yii/bootstrap/enum/Enum.php deleted file mode 100644 index e11cbb4..0000000 --- a/yii/bootstrap/enum/Enum.php +++ /dev/null @@ -1,26 +0,0 @@ - - * @since 2.0 - */ -class Enum -{ - const FADE = 'fade'; - const IN = 'in'; - const CLOSE = 'close'; - const DISABLED = 'disabled'; - const ACTIVE = 'active'; - const MODAL = 'modal'; - const HIDE = 'hide'; - const DIALOG = 'dialog'; - const ALERT = 'alert'; -} \ No newline at end of file diff --git a/yii/bootstrap/helpers/Alert.php b/yii/bootstrap/helpers/Alert.php deleted file mode 100644 index 58139bd..0000000 --- a/yii/bootstrap/helpers/Alert.php +++ /dev/null @@ -1,19 +0,0 @@ - - * @since 2.0 - */ -class Alert extends base\Alert -{ - -} \ No newline at end of file diff --git a/yii/bootstrap/helpers/Assets.php b/yii/bootstrap/helpers/Assets.php deleted file mode 100644 index e03b04f..0000000 --- a/yii/bootstrap/helpers/Assets.php +++ /dev/null @@ -1,19 +0,0 @@ - - * @since 2.0 - */ -class Assets extends base\Assets -{ - -} \ No newline at end of file diff --git a/yii/bootstrap/helpers/Button.php b/yii/bootstrap/helpers/Button.php deleted file mode 100644 index 1448838..0000000 --- a/yii/bootstrap/helpers/Button.php +++ /dev/null @@ -1,19 +0,0 @@ - - * @since 2.0 - */ -class Button extends base\Button -{ - -} \ No newline at end of file diff --git a/yii/bootstrap/helpers/Icon.php b/yii/bootstrap/helpers/Icon.php deleted file mode 100644 index 1be2660..0000000 --- a/yii/bootstrap/helpers/Icon.php +++ /dev/null @@ -1,21 +0,0 @@ - - * @since 2.0 - */ -class Icon extends base\Icon -{ - -} \ No newline at end of file diff --git a/yii/bootstrap/helpers/Progress.php b/yii/bootstrap/helpers/Progress.php deleted file mode 100644 index 4e5bc7f..0000000 --- a/yii/bootstrap/helpers/Progress.php +++ /dev/null @@ -1,19 +0,0 @@ - - * @since 2.0 - */ -class Progress extends base\Progress -{ - -} \ No newline at end of file diff --git a/yii/bootstrap/helpers/base/Alert.php b/yii/bootstrap/helpers/base/Alert.php deleted file mode 100644 index 23899d6..0000000 --- a/yii/bootstrap/helpers/base/Alert.php +++ /dev/null @@ -1,55 +0,0 @@ - - * @since 2.0 - */ -class Alert -{ - - /** - * constants - */ - const CLASS_NAME = 'alert'; - const TYPE_DEFAULT = ''; - const TYPE_SUCCESS = 'alert-success'; - const TYPE_INFORMATION = 'alert-info'; - const TYPE_ERROR = 'alert-error'; - const SIZE_BLOCK = 'alert-block'; - - /** - * Generates an alert box - * @param $message - * @param array $htmlOptions - * @param bool $dismiss whether to display dismissal link or not - * @return string - */ - public static function create($message, $htmlOptions = array(), $dismiss = true) - { - // TODO: this method may should be added to ArrayHelper::add or ArrayHelper::append? - if (isset($htmlOptions['class'])) - $htmlOptions['class'] .= ' ' . static::CLASS_NAME; - else - $htmlOptions['class'] = static::CLASS_NAME; - - ob_start(); - echo Html::beginTag('div', $htmlOptions); - if ($dismiss) - echo Button::closeLink('×', Enum::ALERT); - echo $message; - echo Html::endTag('div'); - return ob_get_clean(); - } -} \ No newline at end of file diff --git a/yii/bootstrap/helpers/base/Assets.php b/yii/bootstrap/helpers/base/Assets.php deleted file mode 100644 index 3f7f7e6..0000000 --- a/yii/bootstrap/helpers/base/Assets.php +++ /dev/null @@ -1,78 +0,0 @@ - - * @since 2.0 - */ -class Assets -{ - public static function registerBundle($responsive = false) - { - $bundle = $responsive ? 'yii/bootstrap' : 'yii/bootstrap-responsive'; - - Yii::$app->getView()->registerAssetBundle($bundle); - } - - /** - * 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. - */ - public static function registerEvents($selector, $events = array(), $position = View::POS_END) - { - if (empty($events)) - return; - - $script = ''; - foreach ($events as $name => $handler) { - $handler = ($handler instanceof JsExpression) - ? $handler - : new JsExpression($handler); - - $script .= ";jQuery(document).ready(function (){jQuery('{$selector}').on('{$name}', {$handler});});"; - } - if (!empty($script)) - Yii::$app->getView()>registerJs($script, array('position' => $position), static::getUniqueScriptId()); - } - - /** - * Registers a specific Bootstrap plugin using the given selector and options. - * - * @param string $selector the CSS selector. - * @param string $name the name of the plugin - * @param array $options the JavaScript options for the plugin. - * @param int $position the position of the JavaScript code. - */ - public static function registerPlugin($selector, $name, $options = array(), $position = View::POS_END) - { - $options = !empty($options) ? Json::encode($options) : ''; - $script = ";jQuery(document).ready(function (){jQuery('{$selector}').{$name}({$options});});"; - Yii::$app->getView()->registerJs($script, array('position'=>$position)); - } - - /** - * Generates a "somewhat" random id string. - * @return string the id. - */ - public static function getUniqueScriptId() - { - return uniqid(time() . '#', true); - } -} \ No newline at end of file diff --git a/yii/bootstrap/helpers/base/Button.php b/yii/bootstrap/helpers/base/Button.php deleted file mode 100644 index c0ea329..0000000 --- a/yii/bootstrap/helpers/base/Button.php +++ /dev/null @@ -1,85 +0,0 @@ - - * @since 2.0 - */ -class Button -{ - /** - * constants - */ - const TYPE_DEFAULT = 'btn'; - const TYPE_PRIMARY = 'btn-primary'; - const TYPE_INFO = 'btn-info'; - const TYPE_SUCCESS = 'btn-success'; - const TYPE_WARNING = 'btn-warning'; - const TYPE_DANGER = 'btn-danger'; - const TYPE_INVERSE = 'btn-inverse'; - const TYPE_LINK = 'btn-link'; - - const SIZE_DEFAULT = ''; - const SIZE_LARGE = 'btn-large'; - const SIZE_SMALL = 'btn-small'; - const SIZE_MINI = 'btn-mini'; - const SIZE_BLOCK = 'btn-block'; - - /** - * Returns a dismissal alert link - * @param string $text - * @param string $dismiss what to dismiss (alert or modal) - * @return string the dismissal alert link - */ - public static function closeLink($text = '×', $dismiss = null) - { - $options = array('class' => Enum::CLOSE); - if(null !== $dismiss) - $options['data-dismiss'] = $dismiss; - return Html::a($text, '#', $options); - } - - /** - * Returns a dismissal button - * @param string $text the text to use for the close button - * @param string $dismiss what to dismiss (alert or modal) - * @return string the dismissal button - */ - public static function closeButton($text = '×', $dismiss = null) - { - $options = array('type' => 'button', 'class' => Enum::CLOSE); - if(null !== $dismiss) - $options['data-dismiss'] = $dismiss; - - return Html::button($text, null, null, $options); - } - - - /** - * Returns a link button - * @param string $label the button label - * @param array $htmlOptions the HTML attributes of the button - * @return string the generated button - */ - public static function link($label, $htmlOptions = array()) - { - // TODO: consider method add or append to ArrayHelper class - if (isset($htmlOptions['class'])) - $htmlOptions['class'] .= ' ' . static::TYPE_LINK; - else - $htmlOptions['class'] = static::TYPE_LINK; - - return Html::a($label, '#', $htmlOptions); - } -} \ No newline at end of file diff --git a/yii/bootstrap/helpers/base/Icon.php b/yii/bootstrap/helpers/base/Icon.php deleted file mode 100644 index a11d7e6..0000000 --- a/yii/bootstrap/helpers/base/Icon.php +++ /dev/null @@ -1,185 +0,0 @@ - - * @since 2.0 - */ -class Icon -{ - /** - * constants - */ - const ICON_GLASS = 'icon-glass'; - const ICON_MUSIC = 'icon-music'; - const ICON_SEARCH = 'icon-search'; - const ICON_ENVELOPE = 'icon-envelope'; - const ICON_HEART = 'icon-heart'; - const ICON_STAR = 'icon-star'; - const ICON_STAR_EMPTY = 'icon-star-empty'; - const ICON_USER = 'icon-user'; - const ICON_FILM = 'icon-film'; - const ICON_TH_LARGE = 'icon-th-large'; - const ICON_TH = 'icon-th'; - const ICON_TH_LIST = 'icon-th-list'; - const ICON_OK = 'icon-ok'; - const ICON_REMOVE = 'icon-remove'; - const ICON_ZOOM_IN = 'icon-zoom-in'; - const ICON_ZOOM_OUT = 'icon-zoom-out'; - const ICON_OFF = 'icon-off'; - const ICON_SIGNAL = 'icon-signal'; - const ICON_COG = 'icon-cog'; - const ICON_TRASH = 'icon-trash'; - const ICON_HOME = 'icon-home'; - const ICON_FILE = 'icon-file'; - const ICON_TIME = 'icon-time'; - const ICON_ROAD = 'icon-road'; - const ICON_DOWNLOAD_ALT = 'icon-download-alt'; - const ICON_DOWNLOAD = 'icon-download'; - const ICON_UPLOAD = 'icon-upload'; - const ICON_INBOX = 'icon-inbox'; - const ICON_PLAY_CIRCLE = 'icon-play-circle'; - const ICON_REPEAT = 'icon-repeat'; - const ICON_REFRESH = 'icon-refresh'; - const ICON_LIST_ALT = 'icon-list-alt'; - const ICON_LOCK = 'icon-lock'; - const ICON_FLAG = 'icon-flag'; - const ICON_HEADPHONES = 'icon-headphones'; - const ICON_VOLUME_OFF = 'icon-volume-off'; - const ICON_VOLUME_DOWN = 'icon-volume-down'; - const ICON_VOLUME_UP = 'icon-volume-up'; - const ICON_QRCODE = 'icon-qrcode'; - const ICON_BARCODE = 'icon-barcode'; - const ICON_TAG = 'icon-tag'; - const ICON_TAGS = 'icon-tags'; - const ICON_BOOK = 'icon-book'; - const ICON_BOOKMARK = 'icon-bookmark'; - const ICON_PRINT = 'icon-print'; - const ICON_CAMERA = 'icon-camera'; - const ICON_FONT = 'icon-font'; - const ICON_BOLD = 'icon-bold'; - const ICON_ITALIC = 'icon-italic'; - const ICON_TEXT_HEIGHT = 'icon-text-height'; - const ICON_TEXT_WIDTH = 'icon-text-width'; - const ICON_ALIGN_LEFT = 'icon-align-left'; - const ICON_ALIGN_CENTER = 'icon-align-center'; - const ICON_ALIGN_RIGHT = 'icon-align-right'; - const ICON_ALIGN_JUSTIFY = 'icon-align-justify'; - const ICON_LIST = 'icon-list'; - const ICON_INDENT_LEFT = 'icon-indent-left'; - const ICON_INDENT_RIGHT = 'icon-indent-right'; - const ICON_FACETIME_VIDEO = 'icon-facetime-video'; - const ICON_PICTURE = 'icon-picture'; - const ICON_PENCIL = 'icon-pencil'; - const ICON_MAP_MARKER = 'icon-map-marker'; - const ICON_ADJUST = 'icon-adjust'; - const ICON_TINT = 'icon-tint'; - const ICON_EDIT = 'icon-edit'; - const ICON_SHARE = 'icon-share'; - const ICON_CHECK = 'icon-check'; - const ICON_MOVE = 'icon-move'; - const ICON_STEP_BACKWARD = 'icon-step-backward'; - const ICON_FAST_BACKWARD = 'icon-fast-backward'; - const ICON_BACKWARD = 'icon-backward'; - const ICON_PLAY = 'icon-play'; - const ICON_PAUSE = 'icon-pause'; - const ICON_STOP = 'icon-pause'; - const ICON_FORWARD = 'icon-forward'; - const ICON_FAST_FORWARD = 'icon-fast-forward'; - const ICON_STEP_FORWARD = 'icon-step-forward'; - const ICON_EJECT = 'icon-eject'; - const ICON_CHEVRON_LEFT = 'icon-chevron-left'; - const ICON_CHEVRON_RIGHT = 'icon-chevron-right'; - const ICON_PLUS_SIGN = 'icon-plus-sign'; - const ICON_MINUS_SIGN = 'icon-minus-sign'; - const ICON_REMOVE_SIGN = 'icon-remove-sign'; - const ICON_OK_SIGN = 'icon-ok-sign'; - const ICON_QUESTION_SIGN = 'icon-question-sign'; - const ICON_INFO_SIGN = 'icon-info-sign'; - const ICON_SCREENSHOT = 'icon-screenshot'; - const ICON_REMOVE_CIRCLE = 'icon-remove-circle'; - const ICON_OK_CIRCLE = 'icon-ok-circle'; - const ICON_BAN_CIRCLE = 'icon-ban-circle'; - const ICON_ARROW_LEFT = 'icon-arrow-left'; - const ICON_ARROW_RIGHT = 'icon-arrow-right'; - const ICON_ARROW_UP = 'icon-arrow-up'; - const ICON_ARROW_DOWN = 'icon-arrow-down'; - const ICON_SHARE_ALT = 'icon-share-alt'; - const ICON_RESIZE_FULL = 'icon-resize-full'; - const ICON_RESIZE_SMALL = 'icon-resize-small'; - const ICON_PLUS = 'icon-plus'; - const ICON_MINUS = 'icon-minus'; - const ICON_ASTERISK = 'icon-asterisk'; - const ICON_EXCLAMATION_SIGN = 'icon-exclamation-sign'; - const ICON_GIFT = 'icon-gift'; - const ICON_LEAF = 'icon-leaf'; - const ICON_FIRE = 'icon-fire'; - const ICON_EYE_OPEN = 'icon-eye-open'; - const ICON_EYE_CLOSE = 'icon-eye-close'; - const ICON_WARNING_SIGN = 'icon-warning-sign'; - const ICON_PLANE = 'icon-plane'; - const ICON_CALENDAR = 'icon-calendar'; - const ICON_RANDOM = 'icon-random'; - const ICON_COMMENT = 'icon-comment'; - const ICON_MAGNET = 'icon-magnet'; - const ICON_CHEVRON_UP = 'icon-chevron-up'; - const ICON_CHEVRON_DOWN = 'icon-chevron-down'; - const ICON_RETWEET = 'icon-retweet'; - const ICON_SHOPPING_CART = 'icon-shopping-cart'; - const ICON_FOLDER_CLOSE = 'icon-folder-close'; - const ICON_FOLDER_OPEN = 'icon-folder-open'; - const ICON_RESIZE_VERTICAL = 'icon-resize-vertical'; - const ICON_RESIZE_HORIZONTAL = 'icon-resize-horizontal'; - const ICON_HDD = 'icon-hdd'; - const ICON_BULLHORN = 'icon-bullhorn'; - const ICON_BELL = 'icon-bell'; - const ICON_CERTFICATE = 'icon-certificate'; - const ICON_THUMBS_UP = 'icon-thumbs-up'; - const ICON_THUMBS_DOWN = 'icon-thumbs-down'; - const ICON_HAND_RIGHT = 'icon-hand-right'; - const ICON_HAND_LEFT = 'icon-hand-left'; - const ICON_HAND_UP = 'icon-hand-up'; - const ICON_HAND_DOWN = 'icon-hand-down'; - const ICON_CIRCLE_ARROW_RIGHT = 'icon-circle-arrow-right'; - const ICON_CIRCLE_ARROW_LEFT = 'icon-circle-arrow-left'; - const ICON_CIRCLE_ARROW_UP = 'icon-circle-arrow-up'; - const ICON_CIRCLE_ARROW_DOWN = 'icon-circle-arrow-down'; - const ICON_GLOBE = 'icon-globe'; - const ICON_WRENCH = 'icon-wrench'; - const ICON_TASKS = 'icon-tasks'; - const ICON_FILTER = 'icon-filter'; - const ICON_BRIEFCASE = 'icon-briefcase'; - const ICON_FULLSCREEN = 'icon-fullscreen'; - - /** - * Generates an icon. - * @param string $icon the icon type. - * @param array $htmlOptions additional HTML attributes. - * @return string the generated icon. - */ - public static function i($icon, $htmlOptions = array()) - { - if (is_string($icon)) - { - if (strpos($icon, 'icon-') === false) - $icon = 'icon-' . implode(' icon-', explode(' ', $icon)); - - // TODO: this method may should be added to ArrayHelper::add or ArrayHelper::append? - if (isset($htmlOptions['class'])) - $htmlOptions['class'] .= ' ' . $icon; - else - $htmlOptions['class'] = $icon; - - return Html::tag('i', '', $htmlOptions); - } - return ''; - } -} \ No newline at end of file diff --git a/yii/bootstrap/helpers/base/Progress.php b/yii/bootstrap/helpers/base/Progress.php deleted file mode 100644 index 8006f66..0000000 --- a/yii/bootstrap/helpers/base/Progress.php +++ /dev/null @@ -1,19 +0,0 @@ - - * @since 2.0 - */ -class Progress -{ - -} \ No newline at end of file