Commit 25512733 by Antonio Ramirez

new proposed structure

parent 6cea89d8
......@@ -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 <amigo.cobos@gmail.com>
* @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
......@@ -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.
......
<?php
/**
* @copyright Copyright (c) 2008 Yii Software LLC
* @link http://www.yiiframework.com/
* @license http://www.yiiframework.com/license/
*/
namespace yii\bootstrap\enum;
/**
* Enum provides bootstrap shared predefined set of named values.
*
* @author Antonio Ramirez <amigo.cobos@gmail.com>
* @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
<?php
/**
* @copyright Copyright (c) 2008 Yii Software LLC
* @link http://www.yiiframework.com/
* @license http://www.yiiframework.com/license/
*/
namespace yii\bootstrap\helpers;
/**
* Alert provides methods to make use of bootstrap alert messages in your application
*
* @author Antonio Ramirez <amigo.cobos@gmail.com>
* @since 2.0
*/
class Alert extends base\Alert
{
}
\ No newline at end of file
<?php
/**
* @copyright Copyright (c) 2008 Yii Software LLC
* @link http://www.yiiframework.com/
* @license http://www.yiiframework.com/license/
*/
namespace yii\bootstrap\helpers;
/**
* Assets provides methods to register bootstrap assets.
*
* @author Antonio Ramirez <amigo.cobos@gmail.com>
* @since 2.0
*/
class Assets extends base\Assets
{
}
\ No newline at end of file
<?php
/**
* @copyright Copyright (c) 2008 Yii Software LLC
* @link http://www.yiiframework.com/
* @license http://www.yiiframework.com/license/
*/
namespace yii\bootstrap\helpers;
/**
* Button provides methods to make use of bootstrap buttons in your application.
*
* @author Antonio Ramirez <amigo.cobos@gmail.com>
* @since 2.0
*/
class Button extends base\Button
{
}
\ No newline at end of file
<?php
/**
* @copyright Copyright (c) 2008 Yii Software LLC
* @link http://www.yiiframework.com/
* @license http://www.yiiframework.com/license/
*/
namespace yii\bootstrap\helpers;
use yii\helpers\Html;
/**
* Icon allows you to render Bootstrap Glyphicons sets
*
* @author Antonio Ramirez <amigo.cobos@gmail.com>
* @since 2.0
*/
class Icon extends base\Icon
{
}
\ No newline at end of file
<?php
/**
* @copyright Copyright (c) 2008 Yii Software LLC
* @link http://www.yiiframework.com/
* @license http://www.yiiframework.com/license/
*/
namespace yii\bootstrap\helpers;
/**
* Progress provides methods to make use of bootstrap progress bars in your application
*
* @author Antonio Ramirez <amigo.cobos@gmail.com>
* @since 2.0
*/
class Progress extends base\Progress
{
}
\ No newline at end of file
<?php
/**
* @copyright Copyright (c) 2008 Yii Software LLC
* @link http://www.yiiframework.com/
* @license http://www.yiiframework.com/license/
*/
namespace yii\bootstrap\helpers\base;
use yii\bootstrap\enum\Enum;
use yii\helpers\Html;
/**
* Alert provides methods to make use of bootstrap alert messages in your application
*
* @author Antonio Ramirez <amigo.cobos@gmail.com>
* @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('&times;', Enum::ALERT);
echo $message;
echo Html::endTag('div');
return ob_get_clean();
}
}
\ No newline at end of file
<?php
/**
* @copyright Copyright (c) 2008 Yii Software LLC
* @link http://www.yiiframework.com/
* @license http://www.yiiframework.com/license/
*/
namespace yii\bootstrap\helpers\base;
use Yii;
use yii\helpers\Json;
use yii\web\JsExpression;
/**
* Assets provides methods to register bootstrap assets.
*
* @author Antonio Ramirez <amigo.cobos@gmail.com>
* @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
<?php
/**
* @copyright Copyright (c) 2008 Yii Software LLC
* @link http://www.yiiframework.com/
* @license http://www.yiiframework.com/license/
*/
namespace yii\bootstrap\helpers\base;
use yii\bootstrap\enum\Enum;
use yii\helpers\Html;
/**
* Button provides methods to make use of bootstrap buttons in your application.
*
* @author Antonio Ramirez <amigo.cobos@gmail.com>
* @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 = '&times;', $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 = '&times', $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
<?php
/**
* @copyright Copyright (c) 2008 Yii Software LLC
* @link http://www.yiiframework.com/
* @license http://www.yiiframework.com/license/
*/
namespace yii\bootstrap\helpers\base;
/**
* Icon allows you to render Bootstrap Glyphicons sets
*
* @author Antonio Ramirez <amigo.cobos@gmail.com>
* @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
<?php
/**
* @copyright Copyright (c) 2008 Yii Software LLC
* @link http://www.yiiframework.com/
* @license http://www.yiiframework.com/license/
*/
namespace yii\bootstrap\helpers\base;
/**
* Progress provides methods to make use of bootstrap progress bars in your application
*
* @author Antonio Ramirez <amigo.cobos@gmail.com>
* @since 2.0
*/
class Progress
{
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment