forked from e-frank/yii2-knockout
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathActiveForm.php
More file actions
126 lines (94 loc) · 4.98 KB
/
Copy pathActiveForm.php
File metadata and controls
126 lines (94 loc) · 4.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?
namespace efrank\knockout\widgets;
use Yii;
use yii\helpers\Html;
use yii\helpers\ArrayHelper;
use yii\helpers\Json;
use yii\base\InvalidConfigException;
use yii\web\View;
use yii\web\JsExpression;
class ActiveForm extends \yii\bootstrap\ActiveForm {
const TYPE_INPUT = 1;
public $dateFormat = 'yy-mm-dd';
public $enableClientValidation = false;
public $validateOnSubmit = false;
public $validateOnChange = false;
public $afterSubmit = null;
private $labels = [];
// public $fieldConfig = [
// 'template' => "{label}\n{beginWrapper}\n{input}\n{hidden}ZZZ\n{hint}\n{error}\n{endWrapper}",
// ];
public function field222($model, $attribute, $options = []) {
$inputOptions = ArrayHelper::getValue($options, 'inputOptions', []);
$inputOptions = ArrayHelper::merge($inputOptions, ['name' => '', 'data-bind' => sprintf('value: %s.display', $attribute)]);
$options['inputOptions'] = $inputOptions;
$options['options'] = ['class' => 'control-group', 'data-bind' => sprintf("css:{'%s':%s.hasError,'%s':%s.validated}", $this->errorCssClass, $attribute, $this->successCssClass, $attribute)];
$options['errorOptions'] = ['data-bind' => sprintf("foreach:%s.errors", $attribute)];
$options['parts']['{error}'] = sprintf('<!-- ko foreach: %1$s.errors --><p class="help-block help-block-error" data-bind="text:$data"></p><!-- /ko --><!-- ko if: (%1$s.errors || []).length == 0 --><p class="help-block help-block-error"></p><!-- /ko -->', $attribute);
$options['parts']['{hidden}'] = Html::hiddenInput(sprintf('%s[%s]', basename(get_class($model)), $attribute), null, ['data-bind' => sprintf('value: %s', $attribute)]);
return parent::field($model, $attribute, $options);
}
public function display($model, $attribute, $options = []) {
$inputOptions = ArrayHelper::getValue($options, 'inputOptions', []);
$inputOptions['data-bind'] = ArrayHelper::getValue($inputOptions, 'data-bind', sprintf('value: %s.display', $attribute));
$options['inputOptions'] = $inputOptions;
$options['options'] = ['class' => 'control-group', 'data-bind' => sprintf("css:{'has-error':%s.hasError}", $attribute)];
// $options['errorOptions'] = ['data-bind' => sprintf("foreach:%s.errors", $attribute)];
$options['parts']['{error}'] = sprintf('<!-- ko foreach: %1$s.errors --><p class="help-block help-block-error" data-bind="text:$data"></p><!-- /ko --><!-- ko if: %1$s.errors.length == 0 --><p class="help-block help-block-error"></p><!-- /ko -->', $attribute);
return parent::field($model, $attribute, $options);
}
public function label($content) {
return sprintf('<label class="control-label">%s</label>', $content);
}
public function hint($content) {
return sprintf('<label class="control-label">%s</label>', $content);
}
public function datepicker($model, $attribute, $options = []) {
$inputOptions = ArrayHelper::getValue($options, 'inputOptions', []);
$inputOptions['data-bind'] = ArrayHelper::getValue($inputOptions, 'data-bind', sprintf('value: %s.display', $attribute));
$options['inputOptions'] = $inputOptions;
// $a = parent::label($model, $attribute);
// var_dump($a);
echo $this->label($model->getAttributeLabel($attribute)) . sprintf('<div id="%1$s_wrapper" class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
<input class="form-control" data-provide="datepicker" data-date-format="%4$s" id="%1$s_disp" data-bind="value: %3$s.display" />
<span class="input-group-addon" data-bind="click: %3$s.clear"><i class="glyphicon glyphicon-remove"></i></span>
<span class="input-group-addon" data-bind="click: %3$s.current"><i class="glyphicon glyphicon-time"></i></span>
<input type="hidden" id="%1$s" name="%2$s[%3$s]" data-bind="value: %3$s" />
</div>', $this->options['id'], basename($model->className()), $attribute, ArrayHelper::getValue($options, 'format', $this->dateFormat));
// return parent::field($model, $attribute, $options);
}
// public function init()
// {
// parent::init();
// echo $this->renderInput();
// }
public function run()
{
parent::run();
// echo Html::endTag('div');
}
public function init()
{
if (!isset($this->options['id'])) {
$this->options['id'] = $this->getId();
}
if (!isset($this->fieldConfig['class'])) {
$this->fieldConfig['class'] = ActiveField::className();
}
// if (!isset($this->beforeSubmit))
// $this->beforeSubmit = new JsExpression('alert(1)');
$view = $this->getView();
$view->registerJs(sprintf('$("#%1$s [type=submit]").click(function(e) {
e.preventDefault();
var vm = ko.dataFor(document.getElementById("%1$s"));
var before = %2$s;
if (before && !before(vm)) return;
if (vm && vm.update) vm.update(%3$s);
return false;
});', $this->getId(), Json::encode($this->beforeSubmit), Json::encode($this->afterSubmit)), View::POS_READY);
// echo Html::beginTag('div', $this->options);
parent::init();
}
}
?>