* @since 1.0 * @see https://github.com/rendom/bootstrap-3-timepicker * @see https://github.com/jdewit/bootstrap-timepicker */ class TimePicker extends \kartik\base\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 identified * - 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 = [ ]; /** * Initializes the widget * * @throw InvalidConfigException */ public function init() { parent::init (); $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 needed assets */ public function registerAssets() { $view = $this->getView (); TimePickerAsset::register ( $view ); $this->registerPlugin ( 'timepicker' ); } }