* @since 1.0 * @see https://github.com/rendom/bootstrap-3-timepicker * @see https://github.com/jdewit/bootstrap-timepicker */ class TimePicker extends InputWidget { /** * @var string the size of the input - 'lg', 'md', 'sm', 'xs' */ public $size; /** * @var string|boolean the addon content */ public $addon = ''; /** * @var array HTML attributes for the addon container. The following special options are recognized: * - `asButton`: _boolean_, if the addon is to be displayed as a button. * - `buttonOptions`: _array_, HTML attributes if the addon is to be displayed like a button. If [[asButton]] is * `true`, this will default to `['class' => 'btn btn-default']`. */ public $addonOptions = []; /** * @var array HTML attributes for the input group container */ public $containerOptions = []; /** * @inheritdoc */ public $pluginName = 'timepicker'; /** * @inheritdoc */ public function run() { $this->registerAssets(); echo Html::tag('div', $this->renderInput(), $this->containerOptions); } /** * Renders the input * * @return string */ protected function renderInput() { Html::addCssClass($this->options, 'form-control'); if (!empty($this->options['disabled'])) { Html::addCssClass($this->addonOptions, 'disabled-addon'); } if (ArrayHelper::getValue($this->pluginOptions, 'template', true) === false) { Html::addCssClass($this->containerOptions, 'bootstrap-timepicker'); if (isset($this->size)) { Html::addCssClass($this->options, 'input-' . $this->size); Html::addCssClass($this->addonOptions, 'inline-addon inline-addon-' . $this->size); } else { Html::addCssClass($this->addonOptions, 'inline-addon'); } return $this->getInput('textInput') . Html::tag('span', $this->addon, $this->addonOptions); } Html::addCssClass($this->containerOptions, 'bootstrap-timepicker input-group'); $asButton = ArrayHelper::remove($this->addonOptions, 'asButton', false); $buttonOptions = ArrayHelper::remove($this->addonOptions, 'buttonOptions', []); if ($asButton) { Html::addCssClass($this->addonOptions, 'input-group-btn picker'); $buttonOptions['type'] = 'button'; if (empty($buttonOptions['class'])) { Html::addCssClass($buttonOptions, 'btn btn-default'); } $content = Html::button($this->addon, $buttonOptions); } else { Html::addCssClass($this->addonOptions, 'input-group-addon picker'); $content = $this->addon; } $addon = Html::tag('span', $content, $this->addonOptions); if (isset($this->size)) { Html::addCssClass($this->containerOptions, 'input-group-' . $this->size); } return $this->getInput('textInput') . $addon; } /** * Registers the client assets for [[Timepicker]] widget */ public function registerAssets() { $view = $this->getView(); TimePickerAsset::register($view); $this->registerPlugin($this->pluginName); } }