From 830da61dd510139a8bf37014c0965493590793d9 Mon Sep 17 00:00:00 2001 From: Klimov Paul Date: Thu, 23 Apr 2015 17:07:03 +0300 Subject: [PATCH] `yii\bootstrap\Html` helper added --- BaseHtml.php | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++ CHANGELOG.md | 2 ++ Html.php | 22 ++++++++++++++ tests/HtmlTest.php | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 191 insertions(+) create mode 100644 BaseHtml.php create mode 100644 Html.php create mode 100644 tests/HtmlTest.php diff --git a/BaseHtml.php b/BaseHtml.php new file mode 100644 index 0000000..2de8596 --- /dev/null +++ b/BaseHtml.php @@ -0,0 +1,83 @@ + + * @since 2.0.4 + */ +class BaseHtml extends \yii\helpers\Html +{ + /** + * Composes icon HTML. + * @see http://getbootstrap.com/components/#glyphicons + * @param string $name icon short name, for example: 'star' + * @param array $options the tag options in terms of name-value pairs. These will be rendered as + * the attributes of the resulting tag. There are also a special options: + * - tag: string, tag to be rendered, by default 'span' is used. + * - prefix: string, prefix which should be used to compose tag class, by default 'glyphicon glyphicon-' is used. + * @return string icon HTML. + */ + public static function icon($name, $options = []) + { + $tag = ArrayHelper::remove($options, 'tag', 'span'); + $classPrefix = ArrayHelper::remove($options, 'prefix', 'glyphicon glyphicon-'); + static::addCssClass($options, $classPrefix . $name); + return static::tag($tag, '', $options); + } + + /** + * Renders Bootstrap static form control. + * @see http://getbootstrap.com/css/#forms-controls-static + * By default value will be HTML-encoded using [[encode()]], you may control this behavior + * via 'encode' option. + * @param string $value static control value. + * @param array $options the tag options in terms of name-value pairs. These will be rendered as + * the attributes of the resulting tag. There are also a special options: + * - encode: boolean, whether value should be HTML-encoded or not. + * @return string generated HTML + */ + public static function staticControl($value, $options = []) + { + static::addCssClass($options, 'form-control-static'); + $value = (string) $value; + if (isset($options['encode'])) { + $encode = $options['encode']; + unset($options['encode']); + } else { + $encode = true; + } + return static::tag('p', $encode ? static::encode($value) : $value, $options); + } + + /** + * Generates a Bootstrap static form control for the given model attribute. + * @param \yii\base\Model $model the model object. + * @param string $attribute the attribute name or expression. See [[getAttributeName()]] for the format + * about attribute expression. + * @param array $options the tag options in terms of name-value pairs. See [[staticControl()]] for details. + * @return string generated HTML + */ + public static function activeStaticControl($model, $attribute, $options = []) + { + if (isset($options['value'])) { + $value = $options['value']; + unset($options['value']); + } else { + $value = static::getAttributeValue($model, $attribute); + } + return static::staticControl($value, $options); + } +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index fd7214c..30f4c7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,9 @@ Yii Framework 2 bootstrap extension Change Log - Bug #5984: `yii\bootstrap\Activefield::checkbox()` caused browser to link label to the wrong input (cebe) - Bug #7894: Fixed incorrect URL config processing at `yii\bootstrap\Nav::items` if route element is not a first one (nkovacs, klimov-paul) - Enh #29: Added support to list-groups for Collapse class (pana1990, skullcrasher) +- Enh #1344: Added support for the static form controls via `yii\bootstrap\Html` (klimov-paul) - Enh #2546: Added `visible` option to `yii\bootstrap\ButtonGroup::$buttons` (samdark, lukBarros) +- Enh #5207: Added support for the glyphicons via `yii\bootstrap\Html::icon()` (klimov-paul) - Enh #7633: Added `ActionColumn::$buttonOptions` for defining HTML options to be added to the default buttons (cebe) - Enh: Added `Nav::$dropDownCaret` to allow customization of the dropdown caret symbol (cebe) diff --git a/Html.php b/Html.php new file mode 100644 index 0000000..5c1bada --- /dev/null +++ b/Html.php @@ -0,0 +1,22 @@ + + * @since 2.0.4 + */ +class Html extends BaseHtml +{ +} \ No newline at end of file diff --git a/tests/HtmlTest.php b/tests/HtmlTest.php new file mode 100644 index 0000000..6dd167b --- /dev/null +++ b/tests/HtmlTest.php @@ -0,0 +1,84 @@ +', + ], + [ + 'star', + [ + 'tag' => 'i', + 'prefix' => 'my-icon icon-', + ], + '', + ], + ]; + } + + /** + * @dataProvider dataProviderIcon + * + * @param $name + * @param $options + * @param $expectedHtml + */ + public function testIcon($name, array $options, $expectedHtml) + { + $this->assertEquals($expectedHtml, Html::icon($name, $options)); + } + + /** + * @return array + */ + public function dataProviderStaticControl() + { + return [ + [ + 'foo', + [], + '

foo

' + ], + [ + '', + [], + '

<html>

' + ], + [ + '', + [ + 'encode' => false + ], + '

' + ], + ]; + } + + /** + * @dataProvider dataProviderStaticControl + * + * @param string $value + * @param array $options + * @param string $expectedHtml + */ + public function testStaticControl($value, array $options, $expectedHtml) + { + $this->assertEquals($expectedHtml, Html::staticControl($value, $options)); + } +} \ No newline at end of file