-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathTinyMce.php
63 lines (54 loc) · 1.86 KB
/
TinyMce.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
<?php
namespace pendalf89\tinymce;
use yii\helpers\Html;
use yii\helpers\Json;
use yii\widgets\InputWidget;
/**
* TinyMCE renders a tinyMCE js plugin for WYSIWYG editing.
*/
class TinyMce extends InputWidget
{
/**
* @var array the options for the TinyMCE JS plugin.
* Please refer to the TinyMCE JS plugin Web page for possible options.
* @see http://www.tinymce.com/wiki.php/Configuration
*/
public $clientOptions = [];
/**
* @var bool whether to set the on change event for the editor. This is required to be able to validate data.
*/
public $triggerSaveOnBeforeValidateForm = true;
/**
* @inheritdoc
*/
public function run()
{
if ($this->hasModel()) {
$output = Html::activeTextarea($this->model, $this->attribute, $this->options);
} else {
$output = Html::textarea($this->name, $this->value, $this->options);
}
$this->registerClientScript();
return $output;
}
/**
* Registers Twitter TypeAhead Bootstrap plugin and the related events
*/
protected function registerClientScript()
{
$js = [];
$id = $this->options['id'];
TinyMceAsset::register($this->view);
$this->clientOptions['selector'] = "#{$id}";
if (!empty($this->clientOptions['language'])) {
$language_url = LanguageAsset::register($this->view)->baseUrl . "/{$this->clientOptions['language']}.js";
$this->clientOptions['language_url'] = $language_url;
}
$options = Json::encode($this->clientOptions);
$js[] = "tinymce.init($options);";
if ($this->triggerSaveOnBeforeValidateForm) {
$js[] = "$('#{$id}').parents('form').on('beforeValidate', function() { tinymce.triggerSave(); });";
}
$this->view->registerJs(implode("\n", $js));
}
}