mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-16 22:39:52 +08:00
#20 proposed architecture for bootstrap
This commit is contained in:
@@ -42,4 +42,21 @@ return array(
|
||||
),
|
||||
'depends' => array('yii'),
|
||||
),
|
||||
'yii/bootstrap' => array(
|
||||
'sourcePath' => __DIR__ . '/assets/bootstrap',
|
||||
'js' => array(
|
||||
'/js/bootstrap.min.js',
|
||||
),
|
||||
'css' => array(
|
||||
'css/bootstrap.css'
|
||||
),
|
||||
'depends' => array('yii'),
|
||||
),
|
||||
'yii/bootstrap-responsive' => array(
|
||||
'sourcePath' => __DIR__ . '/assets/bootstrap',
|
||||
'css' => array(
|
||||
'css/bootstrap-responsive.css'
|
||||
),
|
||||
'depends' => array('yii/bootstrap'),
|
||||
)
|
||||
);
|
||||
|
||||
26
yii/bootstrap/enum/AlertEnum.php
Normal file
26
yii/bootstrap/enum/AlertEnum.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @link http://www.yiiframework.com/
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\bootstrap\enum;
|
||||
|
||||
/**
|
||||
* AlertEnum provides easy access to all predefined alert set of named values
|
||||
*
|
||||
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||
* @since 2.0
|
||||
*/
|
||||
class AlertEnum
|
||||
{
|
||||
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';
|
||||
}
|
||||
26
yii/bootstrap/enum/BootstrapEnum.php
Normal file
26
yii/bootstrap/enum/BootstrapEnum.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @link http://www.yiiframework.com/
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
namespace yii\bootstrap\enum;
|
||||
|
||||
/**
|
||||
* BootstrapEnum provides bootstrap shared predefined set of named values.
|
||||
*
|
||||
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||
* @since 2.0
|
||||
*/
|
||||
class BootstrapEnum
|
||||
{
|
||||
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';
|
||||
}
|
||||
33
yii/bootstrap/enum/ButtonEnum.php
Normal file
33
yii/bootstrap/enum/ButtonEnum.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @link http://www.yiiframework.com/
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\bootstrap\enum;
|
||||
|
||||
/**
|
||||
* ButtonEnum provides easy access to all predefined button set of named values
|
||||
*
|
||||
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||
* @since 2.0
|
||||
*/
|
||||
class ButtonEnum
|
||||
{
|
||||
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';
|
||||
|
||||
}
|
||||
158
yii/bootstrap/enum/IconEnum.php
Normal file
158
yii/bootstrap/enum/IconEnum.php
Normal file
@@ -0,0 +1,158 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @link http://www.yiiframework.com/
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\bootstrap\enum;
|
||||
|
||||
/**
|
||||
* IconEnum provides easy access to all predefined icon set of named values
|
||||
*
|
||||
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||
* @since 2.0
|
||||
*/
|
||||
class IconEnum
|
||||
{
|
||||
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';
|
||||
}
|
||||
19
yii/bootstrap/enum/ProgressEnum.php
Normal file
19
yii/bootstrap/enum/ProgressEnum.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @link http://www.yiiframework.com/
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\bootstrap\enum;
|
||||
|
||||
/**
|
||||
* ProgressEnum provides easy access to all predefined progress bar set of named values
|
||||
*
|
||||
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||
* @since 2.0
|
||||
*/
|
||||
class ProgressEnum
|
||||
{
|
||||
|
||||
}
|
||||
19
yii/bootstrap/helpers/Alert.php
Normal file
19
yii/bootstrap/helpers/Alert.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?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
|
||||
{
|
||||
|
||||
}
|
||||
19
yii/bootstrap/helpers/Assets.php
Normal file
19
yii/bootstrap/helpers/Assets.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?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
|
||||
{
|
||||
|
||||
}
|
||||
19
yii/bootstrap/helpers/Button.php
Normal file
19
yii/bootstrap/helpers/Button.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?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
|
||||
{
|
||||
|
||||
}
|
||||
43
yii/bootstrap/helpers/Icon.php
Normal file
43
yii/bootstrap/helpers/Icon.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?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
|
||||
{
|
||||
/**
|
||||
* 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 '';
|
||||
}
|
||||
}
|
||||
19
yii/bootstrap/helpers/Progress.php
Normal file
19
yii/bootstrap/helpers/Progress.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?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
|
||||
{
|
||||
|
||||
}
|
||||
46
yii/bootstrap/helpers/base/Alert.php
Normal file
46
yii/bootstrap/helpers/base/Alert.php
Normal file
@@ -0,0 +1,46 @@
|
||||
<?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\AlertEnum;
|
||||
use yii\bootstrap\enum\BootstrapEnum;
|
||||
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
|
||||
{
|
||||
|
||||
/**
|
||||
* 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'] .= ' ' . AlertEnum::CLASS_NAME;
|
||||
else
|
||||
$htmlOptions['class'] = AlertEnum::CLASS_NAME;
|
||||
|
||||
ob_start();
|
||||
echo Html::beginTag('div', $htmlOptions);
|
||||
if ($dismiss)
|
||||
echo Button::closeLink('×', BootstrapEnum::ALERT);
|
||||
echo $message;
|
||||
echo Html::endTag('div');
|
||||
return ob_get_clean();
|
||||
}
|
||||
}
|
||||
25
yii/bootstrap/helpers/base/Assets.php
Normal file
25
yii/bootstrap/helpers/base/Assets.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?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;
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
69
yii/bootstrap/helpers/base/Button.php
Normal file
69
yii/bootstrap/helpers/base/Button.php
Normal file
@@ -0,0 +1,69 @@
|
||||
<?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\AlertEnum;
|
||||
use yii\bootstrap\enum\ButtonEnum;
|
||||
use yii\bootstrap\enum\BootstrapEnum;
|
||||
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
|
||||
{
|
||||
/**
|
||||
* 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' => BootstrapEnum::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' => BootstrapEnum::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'] .= ' ' . ButtonEnum::TYPE_LINK;
|
||||
else
|
||||
$htmlOptions['class'] = ButtonEnum::TYPE_LINK;
|
||||
|
||||
return Html::a($label, '#', $htmlOptions);
|
||||
}
|
||||
}
|
||||
21
yii/bootstrap/helpers/base/Icon.php
Normal file
21
yii/bootstrap/helpers/base/Icon.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?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\IconEnum;
|
||||
|
||||
/**
|
||||
* Icon allows you to render Bootstrap Glyphicons sets
|
||||
*
|
||||
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||
* @since 2.0
|
||||
*/
|
||||
class Icon
|
||||
{
|
||||
|
||||
}
|
||||
21
yii/bootstrap/helpers/base/Progress.php
Normal file
21
yii/bootstrap/helpers/base/Progress.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?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\ProgressEnum;
|
||||
|
||||
/**
|
||||
* 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
|
||||
{
|
||||
|
||||
}
|
||||
303
yii/bootstrap/widgets/Modal.php
Normal file
303
yii/bootstrap/widgets/Modal.php
Normal file
@@ -0,0 +1,303 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\bootstrap\widgets;
|
||||
|
||||
use Yii;
|
||||
use yii\helpers\Html;
|
||||
use yii\helpers\ArrayHelper;
|
||||
use yii\bootstrap\helpers\Button;
|
||||
use yii\bootstrap\enum\BootstrapEnum;
|
||||
use yii\web\JsExpression;
|
||||
|
||||
/**
|
||||
* Modal renders a bootstrap modal on the page for its use on your application.
|
||||
*
|
||||
* Basic usage:
|
||||
*
|
||||
* ```php
|
||||
* $this->widget(Modal::className(), array(
|
||||
* 'id' => 'myModal',
|
||||
* 'header' => 'Modal Heading',
|
||||
* 'content' => '<p>One fine body...</p>',
|
||||
* 'footer' => '//modal/_footer', // we can also use view paths
|
||||
* 'buttonOptions' => array(
|
||||
* 'label' => 'Show Modal',
|
||||
* 'class' => \yii\bootstrap\enum\ButtonEnum::TYPE_DEFAULT
|
||||
* )
|
||||
* ));
|
||||
* ```
|
||||
* @see http://twitter.github.io/bootstrap/javascript.html#modals
|
||||
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||
* @since 2.0
|
||||
*/
|
||||
class Modal extends base\BootstrapWidget
|
||||
{
|
||||
/**
|
||||
* @var array The additional HTML attributes of the button that will show the modal. If empty array, only
|
||||
* the markup of the modal will be rendered on the page, so users can easily call the modal manually with their own
|
||||
* scripts. The following special attributes are available:
|
||||
* <ul>
|
||||
* <li>label: string, the label of the button</li>
|
||||
* </ul>
|
||||
*
|
||||
* For available options of the button trigger, see http://twitter.github.com/bootstrap/javascript.html#modals.
|
||||
*/
|
||||
public $buttonOptions = array();
|
||||
|
||||
/**
|
||||
* @var boolean indicates whether the modal should use transitions. Defaults to 'true'.
|
||||
*/
|
||||
public $fade = true;
|
||||
|
||||
/**
|
||||
* @var bool $keyboard, closes the modal when escape key is pressed.
|
||||
*/
|
||||
public $keyboard = true;
|
||||
|
||||
/**
|
||||
* @var bool $show, shows the modal when initialized.
|
||||
*/
|
||||
public $show = false;
|
||||
|
||||
/**
|
||||
* @var mixed includes a modal-backdrop element. Alternatively, specify `static` for a backdrop which doesn't close
|
||||
* the modal on click.
|
||||
*/
|
||||
public $backdrop = true;
|
||||
|
||||
/**
|
||||
* @var mixed the remote url. If a remote url is provided, content will be loaded via jQuery's load method and
|
||||
* injected into the .modal-body of the modal.
|
||||
*/
|
||||
public $remote;
|
||||
|
||||
/**
|
||||
* @var string a javascript function that will be invoked immediately when the `show` instance method is called.
|
||||
*/
|
||||
public $onShow;
|
||||
|
||||
/**
|
||||
* @var string a javascript function that will be invoked when the modal has been made visible to the user
|
||||
* (will wait for css transitions to complete).
|
||||
*/
|
||||
public $onShown;
|
||||
|
||||
/**
|
||||
* @var string a javascript function that will be invoked immediately when the hide instance method has been called.
|
||||
*/
|
||||
public $onHide;
|
||||
|
||||
/**
|
||||
* @var string a javascript function that will be invoked when the modal has finished being hidden from the user
|
||||
* (will wait for css transitions to complete).
|
||||
*/
|
||||
public $onHidden;
|
||||
|
||||
/**
|
||||
* @var string[] the Javascript event handlers.
|
||||
*/
|
||||
protected $events = array();
|
||||
|
||||
/**
|
||||
* @var array $pluginOptions the plugin options.
|
||||
*/
|
||||
protected $pluginOptions = array();
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $closeText = '×';
|
||||
|
||||
/**
|
||||
* @var string header content. Header can also be a path to a view file.
|
||||
*/
|
||||
public $header;
|
||||
|
||||
/**
|
||||
* @var string body of modal. Body can also be a path to a view file.
|
||||
*/
|
||||
public $content;
|
||||
|
||||
/**
|
||||
* @var string footer content. Content can also be a path to a view file.
|
||||
*/
|
||||
public $footer;
|
||||
|
||||
/**
|
||||
* Widget's init method
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
parent::init();
|
||||
|
||||
$this->name = 'modal';
|
||||
|
||||
$this->defaultOption('id', $this->getId());
|
||||
$this->selector = '#' . ArrayHelper::getValue($this->options, 'id');
|
||||
|
||||
$this->defaultOption('role', BootstrapEnum::DIALOG);
|
||||
$this->defaultOption('tabindex', '-1');
|
||||
|
||||
$this->addOption('class', BootstrapEnum::MODAL);
|
||||
$this->addOption('class', BootstrapEnum::HIDE);
|
||||
|
||||
if ($this->fade)
|
||||
$this->addOption('class', BootstrapEnum::FADE);
|
||||
|
||||
$this->initPluginOptions();
|
||||
$this->initPluginEvents();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize plugin events if any
|
||||
*/
|
||||
public function initPluginEvents()
|
||||
{
|
||||
foreach (array('onShow', 'onShown', 'onHide', 'onHidden') as $event) {
|
||||
if ($this->{$event} !== null) {
|
||||
$modalEvent = strtolower(substr($event, 2));
|
||||
if ($this->{$event} instanceof JsExpression)
|
||||
$this->events[$modalEvent] = $this->$event;
|
||||
else
|
||||
$this->events[$modalEvent] = new JsExpression($this->{$event});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize plugin options.
|
||||
* ***Important***: The display of the button overrides the initialization of the modal bootstrap widget.
|
||||
*/
|
||||
public function initPluginOptions()
|
||||
{
|
||||
if (null !== $this->remote)
|
||||
$this->pluginOptions['remote'] = Html::url($this->remote);
|
||||
|
||||
foreach (array('backdrop', 'keyboard', 'show') as $option) {
|
||||
$this->pluginOptions[$option] = isset($this->pluginOptions[$option])
|
||||
? $this->pluginOptions[$option]
|
||||
: $this->{$option};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Widget's run method
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$this->renderModal();
|
||||
$this->renderButton();
|
||||
$this->registerScript();
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the button that will open the modal if its options have been configured
|
||||
*/
|
||||
public function renderButton()
|
||||
{
|
||||
if (!empty($this->buttonOptions)) {
|
||||
|
||||
$this->buttonOptions['data-toggle'] = isset($this->buttonOptions['data-toggle'])
|
||||
? $this->buttonOptions['data-toggle']
|
||||
: BootstrapEnum::MODAL;
|
||||
|
||||
if ($this->remote !== null && !isset($this->buttonOptions['data-remote']))
|
||||
$this->buttonOptions['data-remote'] = Html::url($this->remote);
|
||||
|
||||
$label = ArrayHelper::remove($this->buttonOptions, 'label', 'Button');
|
||||
$name = ArrayHelper::remove($this->buttonOptions, 'name');
|
||||
$value = ArrayHelper::remove($this->buttonOptions, 'value');
|
||||
|
||||
$attr = isset($this->buttonOptions['data-remote'])
|
||||
? 'data-target'
|
||||
: 'href';
|
||||
|
||||
$this->buttonOptions[$attr] = isset($this->buttonOptions[$attr])
|
||||
? $this->buttonOptions[$attr]
|
||||
: $this->selector;
|
||||
|
||||
echo Html::button($label, $name, $value, $this->buttonOptions);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the modal markup
|
||||
*/
|
||||
public function renderModal()
|
||||
{
|
||||
echo Html::beginTag('div', $this->options) . PHP_EOL;
|
||||
|
||||
$this->renderModalHeader();
|
||||
$this->renderModalBody();
|
||||
$this->renderModalFooter();
|
||||
|
||||
echo Html::endTag('div') . PHP_EOL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the header HTML markup of the modal
|
||||
*/
|
||||
public function renderModalHeader()
|
||||
{
|
||||
echo '<div class="modal-header">' . PHP_EOL;
|
||||
if ($this->closeText)
|
||||
echo Button::closeButton($this->closeText, BootstrapEnum::MODAL);
|
||||
echo $this->renderSection($this->header);
|
||||
echo '</div>' . PHP_EOL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the HTML markup for the body of the modal
|
||||
*/
|
||||
public function renderModalBody()
|
||||
{
|
||||
echo '<div class="modal-body">' . PHP_EOL;
|
||||
echo $this->renderSection($this->content);
|
||||
echo '</div>' . PHP_EOL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the HTML markup for the footer of the modal
|
||||
*/
|
||||
public function renderModalFooter()
|
||||
{
|
||||
|
||||
echo '<div class="modal-footer">' . PHP_EOL;
|
||||
echo $this->renderSection($this->footer);
|
||||
echo '</div>' . PHP_EOL;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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()
|
||||
{
|
||||
// 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);
|
||||
|
||||
// register events
|
||||
$this->registerEvents($this->selector, $this->events);
|
||||
}
|
||||
|
||||
}
|
||||
139
yii/bootstrap/widgets/base/BootstrapWidget.php
Normal file
139
yii/bootstrap/widgets/base/BootstrapWidget.php
Normal file
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace yii\bootstrap\widgets\base;
|
||||
|
||||
use Yii;
|
||||
use yii\base\View;
|
||||
use yii\base\Widget;
|
||||
use yii\base\InvalidCallException;
|
||||
use yii\helpers\base\Json;
|
||||
use yii\web\JsExpression;
|
||||
|
||||
/**
|
||||
* BootstrapWidget is the base class for bootstrap widgets.
|
||||
*
|
||||
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||
* @since 2.0
|
||||
*/
|
||||
class BootstrapWidget extends Widget
|
||||
{
|
||||
|
||||
/**
|
||||
* @var bool whether to register the asset
|
||||
*/
|
||||
public $responsive = true;
|
||||
|
||||
/**
|
||||
* @var array the HTML attributes for the widget container tag.
|
||||
*/
|
||||
public $options = array();
|
||||
|
||||
/**
|
||||
* @var string the widget name
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
/**
|
||||
* @var string the jQuery selector of the widget
|
||||
*/
|
||||
protected $selector;
|
||||
|
||||
/**
|
||||
* Initializes the widget.
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
$this->view->registerAssetBundle(($this->responsive ? 'yii/bootstrap' : 'yii/bootstrap-responsive'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
protected 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))
|
||||
$this->view->registerJs($script, array('position' => $position), $this->getUniqueScriptId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
public function registerPlugin($selector, $options = array(), $position = View::POS_END)
|
||||
{
|
||||
if(null === $this->name)
|
||||
throw new InvalidCallException();
|
||||
|
||||
$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
|
||||
*/
|
||||
protected function getUniqueScriptId()
|
||||
{
|
||||
return uniqid(time() . '#', true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @param string $key
|
||||
* @param mixed $value
|
||||
* @param string $glue
|
||||
* @return array
|
||||
*/
|
||||
protected function addOption($key, $value, $glue = ' ')
|
||||
{
|
||||
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]);
|
||||
} else
|
||||
$this->options[$key] = $value;
|
||||
return $this->options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the default value for an item if not set.
|
||||
* @param string $key the name of the item.
|
||||
* @param mixed $value the default value.
|
||||
* @return array
|
||||
*/
|
||||
protected function defaultOption($key, $value)
|
||||
{
|
||||
if (!isset($this->options[$key]))
|
||||
$this->options[$key] = $value;
|
||||
return $this->options;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user