/** * @param string $language * @dataProvider languageDataProvider */ public function testBundleHasFile2($language) { $assetManager = Yii::$app->getAssetManager(); $assetManager->bundles[DatePickerLanguageAsset::className()] = ['language' => $language]; $bundle = $assetManager->getBundle(DatePickerLanguageAsset::className()); $this->assertInstanceOf('yii\\jui\\datepicker\\DatePickerLanguageAsset', $bundle); $this->assertArrayHasKey(0, $bundle->depends); $this->assertEquals('yii\\jui\\datepicker\\DatePickerAsset', $bundle->depends[0]); $this->assertArrayHasKey(0, $bundle->js); $this->assertFileExists($bundle->basePath . DIRECTORY_SEPARATOR . $bundle->js[0]); }
/** * @inheritdoc */ public function init() { parent::init(); $this->sourcePath = get_class_vars(DatePickerLanguageAsset::className())['sourcePath']; if (is_null($this->language)) { $this->language = Yii::$app->language; if (is_null($this->language)) { $this->language = 'en-US'; } } if ($this->language != 'en-US' && $this->language != 'en') { $sourcePath = Yii::getAlias($this->sourcePath); $intlLoaded = extension_loaded('intl'); $version = $intlLoaded ? 'intl-' . phpversion('intl') : 'fix'; $jsFile = 'datepicker-' . $this->language . '-' . $version . '.js'; if (!is_file($sourcePath . DIRECTORY_SEPARATOR . $jsFile)) { $clientOptions = ['monthNames' => [], 'monthNamesShort' => [], 'dayNames' => [], 'dayNamesShort' => [], 'dayNamesMin' => []]; $formatter = Yii::$app->getFormatter(); foreach (array_map(function ($month) { return mktime(0, 0, 0, $month); }, range(1, 12)) as $timestamp) { $clientOptions['monthNames'][] = $formatter->asDate($timestamp, 'MMMM'); $clientOptions['monthNamesShort'][] = $formatter->asDate($timestamp, 'MMM'); } foreach (array_map(function ($day) { return mktime(0, 0, 0, 11, $day, 2015); }, range(1, 7)) as $timestamp) { $clientOptions['dayNames'][] = $formatter->asDate($timestamp, 'EEEE'); $clientOptions['dayNamesShort'][] = $formatter->asDate($timestamp, 'EEE'); if ($intlLoaded) { $clientOptions['dayNamesMin'][] = $formatter->asDate($timestamp, 'EEEEEE'); } } $data = 'jQuery.datepicker.setDefaults(' . Json::htmlEncode($clientOptions) . ');'; file_put_contents($sourcePath . DIRECTORY_SEPARATOR . $jsFile, $data); } $this->js[] = $jsFile; } }
/** * @param int $mode * @param string $actual * @param string $expectedHtml * @param string $expectedJs */ protected function checkExpected($mode, $actual, $expectedHtml, $expectedJs) { switch ($mode) { case static::MODE_MODEL_ATTRIBUTE: case static::MODE_MODEL_ATTRIBUTE_VALUE: $expectedHtml = '<div class="form-group field-testform-date">' . "\n" . $expectedHtml . "\n" . '</div>'; case static::MODE_NAME_VALUE: $this->assertEquals($expectedHtml, $actual); $view = Yii::$app->getView(); $this->assertArrayHasKey(DatePickerAsset::className(), $view->assetBundles); $this->assertArrayHasKey(DatePickerLanguageAsset::className(), $view->assetBundles); $this->assertArrayHasKey(DatePickerLanguageFixAsset::className(), $view->assetBundles); $this->assertArrayHasKey(View::POS_READY, $view->js); $jsKey = md5($expectedJs); $this->assertArrayHasKey($jsKey, $view->js[View::POS_READY]); $this->assertEquals($expectedJs, $view->js[View::POS_READY][$jsKey]); return; case static::MODE_NAME_VALUE_AJAX: $expectedHtml .= '<script>' . $expectedJs . '</script>'; $this->assertEquals($expectedHtml, $actual); return; case static::MODE_MODEL_ATTRIBUTE_AJAX: case static::MODE_MODEL_ATTRIBUTE_VALUE_AJAX: $expectedHtml .= '<script>' . $expectedJs . '</script>'; $expectedHtml = '<div class="form-group field-testform-date">' . "\n" . $expectedHtml . "\n" . '</div>'; $this->assertEquals($expectedHtml, $actual); return; } throw new Exception(); }
/** * @inheritdoc */ public function run() { $hasModel = $this->hasModel(); if ($hasModel) { if (array_key_exists('value', $this->options)) { $value = $this->options['value']; } else { $value = Html::getAttributeValue($this->model, $this->attribute); } } else { $value = $this->value; } if (is_int($value) || is_string($value) && strlen($value) || $value instanceof DateTime || $value instanceof DateTimeInterface) { $formatter = Yii::$app->getFormatter(); try { $altValue = $formatter->asDate($value, $this->altDateFormat); $value = $formatter->asDate($value, $this->dateFormat); } catch (InvalidParamException $e) { $altValue = $value; } } else { $altValue = $value; } if ($hasModel) { $this->options = array_merge($this->options, ['name' => false, 'value' => $value]); $this->altOptions['value'] = $altValue; $output = Html::activeTextInput($this->model, $this->attribute, $this->options); $output .= Html::activeHiddenInput($this->model, $this->attribute, $this->altOptions); } else { $output = Html::textInput(false, $value, $this->options); $output .= Html::hiddenInput($this->name, $altValue, $this->altOptions); } $js = 'jQuery(\'#' . $this->options['id'] . '\').datepicker(' . Json::htmlEncode($this->clientOptions) . ');'; if (Yii::$app->getRequest()->getIsAjax()) { $output .= Html::script($js); } else { $view = $this->getView(); DatePickerAsset::register($view); DatePickerLanguageAsset::register($view); DatePickerLanguageFixAsset::register($view); $view->registerJs($js); } return $output; }