mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-22 01:30:23 +08:00
Fixes #1550: fixed the issue that JUI input widgets did not property input IDs.
This commit is contained in:
@@ -4,7 +4,7 @@ Yii Framework 2 jui extension Change Log
|
|||||||
2.0.0 beta under development
|
2.0.0 beta under development
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
- no changes in this release.
|
- Bug #1550: fixed the issue that JUI input widgets did not property input IDs.
|
||||||
|
|
||||||
2.0.0 alpha, December 1, 2013
|
2.0.0 alpha, December 1, 2013
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|||||||
@@ -54,14 +54,30 @@ class DatePicker extends InputWidget
|
|||||||
* @var boolean If true, shows the widget as an inline calendar and the input as a hidden field.
|
* @var boolean If true, shows the widget as an inline calendar and the input as a hidden field.
|
||||||
*/
|
*/
|
||||||
public $inline = false;
|
public $inline = false;
|
||||||
|
/**
|
||||||
|
* @var array the HTML attributes for the container tag. This is only used when [[inline]] is true.
|
||||||
|
*/
|
||||||
|
public $containerOptions = [];
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritdoc
|
||||||
|
*/
|
||||||
|
public function init()
|
||||||
|
{
|
||||||
|
parent::init();
|
||||||
|
if ($this->inline && !isset($this->containerOptions['id'])) {
|
||||||
|
$this->containerOptions['id'] = $this->options['id'] . '-container';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders the widget.
|
* Renders the widget.
|
||||||
*/
|
*/
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
echo $this->renderWidget() . "\n";
|
echo $this->renderWidget() . "\n";
|
||||||
|
$containerID = $this->inline ? $this->containerOptions['id'] : $this->options['id'];
|
||||||
if ($this->language !== false) {
|
if ($this->language !== false) {
|
||||||
$view = $this->getView();
|
$view = $this->getView();
|
||||||
DatePickerRegionalAsset::register($view);
|
DatePickerRegionalAsset::register($view);
|
||||||
@@ -71,10 +87,10 @@ class DatePicker extends InputWidget
|
|||||||
|
|
||||||
$options = $this->clientOptions;
|
$options = $this->clientOptions;
|
||||||
$this->clientOptions = false; // the datepicker js widget is already registered
|
$this->clientOptions = false; // the datepicker js widget is already registered
|
||||||
$this->registerWidget('datepicker', DatePickerAsset::className());
|
$this->registerWidget('datepicker', DatePickerAsset::className(), $containerID);
|
||||||
$this->clientOptions = $options;
|
$this->clientOptions = $options;
|
||||||
} else {
|
} else {
|
||||||
$this->registerWidget('datepicker', DatePickerAsset::className());
|
$this->registerWidget('datepicker', DatePickerAsset::className(), $containerID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,8 +117,7 @@ class DatePicker extends InputWidget
|
|||||||
$this->clientOptions['defaultDate'] = $this->value;
|
$this->clientOptions['defaultDate'] = $this->value;
|
||||||
}
|
}
|
||||||
$this->clientOptions['altField'] = '#' . $this->options['id'];
|
$this->clientOptions['altField'] = '#' . $this->options['id'];
|
||||||
$this->options['id'] .= '-container';
|
$contents[] = Html::tag('div', null, $this->containerOptions);
|
||||||
$contents[] = Html::tag('div', null, $this->options);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return implode("\n", $contents);
|
return implode("\n", $contents);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ namespace yii\jui;
|
|||||||
use Yii;
|
use Yii;
|
||||||
use yii\base\Model;
|
use yii\base\Model;
|
||||||
use yii\base\InvalidConfigException;
|
use yii\base\InvalidConfigException;
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* InputWidget is the base class for all jQuery UI input widgets.
|
* InputWidget is the base class for all jQuery UI input widgets.
|
||||||
@@ -44,7 +45,10 @@ class InputWidget extends Widget
|
|||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
if (!$this->hasModel() && $this->name === null) {
|
if (!$this->hasModel() && $this->name === null) {
|
||||||
throw new InvalidConfigException("Either 'name' or 'model' and 'attribute' properties must be specified.");
|
throw new InvalidConfigException("Either 'name', or 'model' and 'attribute' properties must be specified.");
|
||||||
|
}
|
||||||
|
if ($this->hasModel() && !isset($this->options['id'])) {
|
||||||
|
$this->options['id'] = Html::getInputId($this->model, $this->attribute);
|
||||||
}
|
}
|
||||||
parent::init();
|
parent::init();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,30 +50,42 @@ class SliderInput extends InputWidget
|
|||||||
'start' => 'slidestart',
|
'start' => 'slidestart',
|
||||||
'stop' => 'slidestop',
|
'stop' => 'slidestop',
|
||||||
];
|
];
|
||||||
|
/**
|
||||||
|
* @var array the HTML attributes for the container tag.
|
||||||
|
*/
|
||||||
|
public $containerOptions = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritdoc
|
||||||
|
*/
|
||||||
|
public function init()
|
||||||
|
{
|
||||||
|
parent::init();
|
||||||
|
if (!isset($this->containerOptions['id'])) {
|
||||||
|
$this->containerOptions['id'] = $this->options['id'] . '-container';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes the widget.
|
* Executes the widget.
|
||||||
*/
|
*/
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
echo Html::tag('div', '', $this->options);
|
echo Html::tag('div', '', $this->containerOptions);
|
||||||
|
|
||||||
$inputId = $this->id.'-input';
|
|
||||||
$inputOptions = $this->options;
|
|
||||||
$inputOptions['id'] = $inputId;
|
|
||||||
if ($this->hasModel()) {
|
if ($this->hasModel()) {
|
||||||
echo Html::activeHiddenInput($this->model, $this->attribute, $inputOptions);
|
echo Html::activeHiddenInput($this->model, $this->attribute, $this->options);
|
||||||
} else {
|
} else {
|
||||||
echo Html::hiddenInput($this->name, $this->value, $inputOptions);
|
echo Html::hiddenInput($this->name, $this->value, $this->options);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($this->clientEvents['slide'])) {
|
if (!isset($this->clientEvents['slide'])) {
|
||||||
$this->clientEvents['slide'] = 'function(event, ui) {
|
$this->clientEvents['slide'] = 'function(event, ui) {
|
||||||
$("#'.$inputId.'").val(ui.value);
|
$("#' . $this->options['id'] . '").val(ui.value);
|
||||||
}';
|
}';
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->registerWidget('slider', SliderAsset::className());
|
$this->registerWidget('slider', SliderAsset::className(), $this->containerOptions['id']);
|
||||||
$this->getView()->registerJs('$("#'.$inputId.'").val($("#'.$this->id.'").slider("value"));');
|
$this->getView()->registerJs('$("#' . $this->options['id'] . '").val($("#' . $this->id . '").slider("value"));');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,11 +76,11 @@ class Widget extends \yii\base\Widget
|
|||||||
/**
|
/**
|
||||||
* Registers a specific jQuery UI widget options
|
* Registers a specific jQuery UI widget options
|
||||||
* @param string $name the name of the jQuery UI widget
|
* @param string $name the name of the jQuery UI widget
|
||||||
|
* @param string $id the ID of the widget
|
||||||
*/
|
*/
|
||||||
protected function registerClientOptions($name)
|
protected function registerClientOptions($name, $id)
|
||||||
{
|
{
|
||||||
if ($this->clientOptions !== false) {
|
if ($this->clientOptions !== false) {
|
||||||
$id = $this->options['id'];
|
|
||||||
$options = empty($this->clientOptions) ? '' : Json::encode($this->clientOptions);
|
$options = empty($this->clientOptions) ? '' : Json::encode($this->clientOptions);
|
||||||
$js = "jQuery('#$id').$name($options);";
|
$js = "jQuery('#$id').$name($options);";
|
||||||
$this->getView()->registerJs($js);
|
$this->getView()->registerJs($js);
|
||||||
@@ -90,11 +90,11 @@ class Widget extends \yii\base\Widget
|
|||||||
/**
|
/**
|
||||||
* Registers a specific jQuery UI widget events
|
* Registers a specific jQuery UI widget events
|
||||||
* @param string $name the name of the jQuery UI widget
|
* @param string $name the name of the jQuery UI widget
|
||||||
|
* @param string $id the ID of the widget
|
||||||
*/
|
*/
|
||||||
protected function registerClientEvents($name)
|
protected function registerClientEvents($name, $id)
|
||||||
{
|
{
|
||||||
if (!empty($this->clientEvents)) {
|
if (!empty($this->clientEvents)) {
|
||||||
$id = $this->options['id'];
|
|
||||||
$js = [];
|
$js = [];
|
||||||
foreach ($this->clientEvents as $event => $handler) {
|
foreach ($this->clientEvents as $event => $handler) {
|
||||||
if (isset($this->clientEventMap[$event])) {
|
if (isset($this->clientEventMap[$event])) {
|
||||||
@@ -112,11 +112,15 @@ class Widget extends \yii\base\Widget
|
|||||||
* Registers a specific jQuery UI widget asset bundle, initializes it with client options and registers related events
|
* Registers a specific jQuery UI widget asset bundle, initializes it with client options and registers related events
|
||||||
* @param string $name the name of the jQuery UI widget
|
* @param string $name the name of the jQuery UI widget
|
||||||
* @param string $assetBundle the asset bundle for the widget
|
* @param string $assetBundle the asset bundle for the widget
|
||||||
|
* @param string $id the ID of the widget. If null, it will use the `id` value of [[options]].
|
||||||
*/
|
*/
|
||||||
protected function registerWidget($name, $assetBundle)
|
protected function registerWidget($name, $assetBundle, $id = null)
|
||||||
{
|
{
|
||||||
|
if ($id === null) {
|
||||||
|
$id = $this->options['id'];
|
||||||
|
}
|
||||||
$this->registerAssets($assetBundle);
|
$this->registerAssets($assetBundle);
|
||||||
$this->registerClientOptions($name);
|
$this->registerClientOptions($name, $id);
|
||||||
$this->registerClientEvents($name);
|
$this->registerClientEvents($name, $id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ Yii Framework 2 Change Log
|
|||||||
- Bug #1500: Log messages exported to files are not separated by newlines (omnilight, qiangxue)
|
- Bug #1500: Log messages exported to files are not separated by newlines (omnilight, qiangxue)
|
||||||
- Bug #1509: The SQL for creating Postgres RBAC tables is incorrect (qiangxue)
|
- Bug #1509: The SQL for creating Postgres RBAC tables is incorrect (qiangxue)
|
||||||
- Bug #1545: It was not possible to execute db Query twice, params where missing (cebe)
|
- Bug #1545: It was not possible to execute db Query twice, params where missing (cebe)
|
||||||
|
- Bug #1550: fixed the issue that JUI input widgets did not property input IDs.
|
||||||
- Bug #1591: StringValidator is accessing undefined property (qiangxue)
|
- Bug #1591: StringValidator is accessing undefined property (qiangxue)
|
||||||
- Bug: Fixed `Call to a member function registerAssetFiles() on a non-object` in case of wrong `sourcePath` for an asset bundle (samdark)
|
- Bug: Fixed `Call to a member function registerAssetFiles() on a non-object` in case of wrong `sourcePath` for an asset bundle (samdark)
|
||||||
- Bug: Fixed incorrect event name for `yii\jui\Spinner` (samdark)
|
- Bug: Fixed incorrect event name for `yii\jui\Spinner` (samdark)
|
||||||
@@ -24,7 +25,8 @@ Yii Framework 2 Change Log
|
|||||||
- Enh: Added `Widget::autoIdPrefix` to support prefixing automatically generated widget IDs (qiangxue)
|
- Enh: Added `Widget::autoIdPrefix` to support prefixing automatically generated widget IDs (qiangxue)
|
||||||
- Enh: Support for file aliases in console command 'message' (omnilight)
|
- Enh: Support for file aliases in console command 'message' (omnilight)
|
||||||
- Enh: Sort and Paginiation can now create absolute URLs (cebe)
|
- Enh: Sort and Paginiation can now create absolute URLs (cebe)
|
||||||
- Chg: Renamed yii\jui\Widget::clientEventsMap to clientEventMap (qiangxue)
|
- Chg: Renamed `yii\jui\Widget::clientEventsMap` to `clientEventMap` (qiangxue)
|
||||||
|
- Chg: Added `yii\widgets\InputWidget::options` (qiangxue)
|
||||||
- New #1438: [MongoDB integration](https://github.com/yiisoft/yii2-mongodb) ActiveRecord and Query (klimov-paul)
|
- New #1438: [MongoDB integration](https://github.com/yiisoft/yii2-mongodb) ActiveRecord and Query (klimov-paul)
|
||||||
- New #1393: [Codeception testing framework integration](https://github.com/yiisoft/yii2-codeception) (Ragazzo)
|
- New #1393: [Codeception testing framework integration](https://github.com/yiisoft/yii2-codeception) (Ragazzo)
|
||||||
|
|
||||||
|
|||||||
@@ -38,10 +38,6 @@ class Captcha extends InputWidget
|
|||||||
* The action represented by this route must be an action of [[CaptchaAction]].
|
* The action represented by this route must be an action of [[CaptchaAction]].
|
||||||
*/
|
*/
|
||||||
public $captchaAction = 'site/captcha';
|
public $captchaAction = 'site/captcha';
|
||||||
/**
|
|
||||||
* @var array HTML attributes to be applied to the text input field.
|
|
||||||
*/
|
|
||||||
public $options = [];
|
|
||||||
/**
|
/**
|
||||||
* @var array HTML attributes to be applied to the CAPTCHA image tag.
|
* @var array HTML attributes to be applied to the CAPTCHA image tag.
|
||||||
*/
|
*/
|
||||||
@@ -62,9 +58,6 @@ class Captcha extends InputWidget
|
|||||||
|
|
||||||
$this->checkRequirements();
|
$this->checkRequirements();
|
||||||
|
|
||||||
if (!isset($this->options['id'])) {
|
|
||||||
$this->options['id'] = $this->hasModel() ? Html::getInputId($this->model, $this->attribute) : $this->getId();
|
|
||||||
}
|
|
||||||
if (!isset($this->imageOptions['id'])) {
|
if (!isset($this->imageOptions['id'])) {
|
||||||
$this->imageOptions['id'] = $this->options['id'] . '-image';
|
$this->imageOptions['id'] = $this->options['id'] . '-image';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ use Yii;
|
|||||||
use yii\base\Widget;
|
use yii\base\Widget;
|
||||||
use yii\base\Model;
|
use yii\base\Model;
|
||||||
use yii\base\InvalidConfigException;
|
use yii\base\InvalidConfigException;
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* InputWidget is the base class for widgets that collect user inputs.
|
* InputWidget is the base class for widgets that collect user inputs.
|
||||||
@@ -40,6 +41,10 @@ class InputWidget extends Widget
|
|||||||
* @var string the input value.
|
* @var string the input value.
|
||||||
*/
|
*/
|
||||||
public $value;
|
public $value;
|
||||||
|
/**
|
||||||
|
* @var array the HTML attributes for the input tag.
|
||||||
|
*/
|
||||||
|
public $options = [];
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,7 +54,10 @@ class InputWidget extends Widget
|
|||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
if (!$this->hasModel() && $this->name === null) {
|
if (!$this->hasModel() && $this->name === null) {
|
||||||
throw new InvalidConfigException("Either 'name' or 'model' and 'attribute' properties must be specified.");
|
throw new InvalidConfigException("Either 'name', or 'model' and 'attribute' properties must be specified.");
|
||||||
|
}
|
||||||
|
if (!isset($this->options['id'])) {
|
||||||
|
$this->options['id'] = $this->hasModel() ? Html::getInputId($this->model, $this->attribute) : $this->getId();
|
||||||
}
|
}
|
||||||
parent::init();
|
parent::init();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,10 +61,6 @@ class MaskedInput extends InputWidget
|
|||||||
* @var string a JavaScript function callback that will be invoked when user finishes the input.
|
* @var string a JavaScript function callback that will be invoked when user finishes the input.
|
||||||
*/
|
*/
|
||||||
public $completed;
|
public $completed;
|
||||||
/**
|
|
||||||
* @var array the HTML attributes for the input tag.
|
|
||||||
*/
|
|
||||||
public $options = [];
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -77,10 +73,6 @@ class MaskedInput extends InputWidget
|
|||||||
if (empty($this->mask)) {
|
if (empty($this->mask)) {
|
||||||
throw new InvalidConfigException('The "mask" property must be set.');
|
throw new InvalidConfigException('The "mask" property must be set.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($this->options['id'])) {
|
|
||||||
$this->options['id'] = $this->hasModel() ? Html::getInputId($this->model, $this->attribute) : $this->getId();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user