forked from Dzhus111/pollext
-
Notifications
You must be signed in to change notification settings - Fork 1
/
AjaxSubmitButton.php
129 lines (111 loc) · 3.13 KB
/
AjaxSubmitButton.php
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
127
128
129
<?php
namespace davidjeddy\yii2poll;
use yii\base\Widget;
use yii\helpers\Html;
use yii\helpers\Json;
/**
* AjaxSubmitButton renders an ajax button which is very similar to ajaxSubmitButton from Yii1.
*
* Example:
*
* ```php
* <?= Html::beginForm(); ?>
* <?= Select2::widget([
* 'name' => 'country_code',
* 'data' => Country::getAllCountries(),
* 'options' => [
* 'id' => 'country_select',
* 'multiple' => false,
* 'placeholder' => 'Select country...',
* 'class' => 'uk-width-medium-7-10'
* ]
* ]);?>
*
* <?php
* AjaxSubmitButton::begin([
* 'label' =>'Poll 1',
* 'ajaxOptions' =>
* [
* 'cache' => false,
* 'success' => new \yii\web\JsExpression('function(html){ $("#output").html(html); }'),
* 'type' =>'POST',
* 'url' =>'country/getinfo',
* ],
* 'options' => ['type' => 'submit'],
* ]);
* AjaxSubmitButton::end();
* ?>
*
* <?= Html::endForm(); ?>
* ```
*
* @author Oleg Martemjanov <[email protected]>, David J Eddy <[email protected]>
*/
class AjaxSubmitButton extends Widget
{
/**
* [$ajaxOptions description]
*
* @var array
*/
public $ajaxOptions = [];
/**
* [$ajaxOverride description]
*
* @var array
*/
public $ajaxOverride = [];
/**
* @var array the HTML attributes for the widget container tag.
*/
public $options = [];
/**
* @var string the tag to use to render the button
*/
public $tagName = 'button';
/**
* @var string the button label
*/
public $label = 'Button';
/**
* @var boolean whether the label should be HTML-encoded.
*/
public $encodeLabel = true;
/**
* Initializes the widget.
*/
public function init()
{
parent::init();
if (!isset($this->options['id'])) {
$this->options['id'] = $this->getId();
}
}
public function run()
{
parent::run();
echo Html::tag($this->tagName, $this->encodeLabel ? Html::encode($this->label) : $this->label, $this->options);
if (!empty($this->ajaxOptions)) {
$this->registerAjaxScript();
}
}
protected function registerAjaxScript()
{
$view = $this->getView();
if (!isset($this->ajaxOptions['type'])) {
$this->ajaxOptions['type'] = new \yii\web\JsExpression('$(this).parents("form").attr("method")');
}
if (!isset($this->ajaxOptions['url'])) {
$this->ajaxOptions['url'] = new \yii\web\JsExpression('$(this).parents("form").attr("action")');
}
if (!isset($this->ajaxOptions['data']) && isset($this->ajaxOptions['type'])) {
$this->ajaxOptions['data'] = new \yii\web\JsExpression('$(this).parents("form").serialize()');
$this->ajaxOptions = Json::encode($this->ajaxOptions);
$view->registerJs("$( '#" . $this->options['id'] . "' ).click(function() {
$.ajax(" . $this->ajaxOptions . ");
return false;
});"
);
}
}
}