Last active
July 28, 2017 09:46
-
-
Save Deele/bf7837fb8bdaf5213d06c81a40ec04e9 to your computer and use it in GitHub Desktop.
Implemented an option to call widget initialization on demand (for PJAX, AJAX or other purposes).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @copyright Copyright (c) 2013-2017 2amigOS! Consulting Group LLC | |
* @link http://2amigos.us | |
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License | |
*/ | |
namespace dosamigos\tinymce; | |
use yii\helpers\Html; | |
use yii\helpers\Json; | |
use yii\widgets\InputWidget; | |
/** | |
* | |
* TinyMCE renders a tinyMCE js plugin for WYSIWYG editing. | |
* | |
* @author Antonio Ramirez <[email protected]> | |
* @link http://www.ramirezcobos.com/ | |
* @link http://www.2amigos.us/ | |
*/ | |
class TinyMce extends InputWidget | |
{ | |
/** | |
* @var string the language to use. Defaults to null (en). | |
*/ | |
public $language; | |
/** | |
* @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. | |
* @see https://github.com/2amigos/yii2-tinymce-widget/issues/7 | |
*/ | |
public $triggerSaveOnBeforeValidateForm = true; | |
/** | |
* @inheritdoc | |
*/ | |
public function run() | |
{ | |
if ($this->hasModel()) { | |
echo Html::activeTextarea($this->model, $this->attribute, $this->options); | |
} else { | |
echo Html::textarea($this->name, $this->value, $this->options); | |
} | |
$this->registerClientScript(); | |
} | |
/** | |
* Registers tinyMCE js plugin | |
*/ | |
protected function registerClientScript() | |
{ | |
$js = []; | |
$view = $this->getView(); | |
TinyMceAsset::register($view); | |
$id = $this->options['id']; | |
$callback = 'tinymceInit_' . $id; | |
$this->clientOptions['selector'] = "#$id"; | |
// @codeCoverageIgnoreStart | |
if ($this->language !== null && $this->language !== 'en') { | |
$langFile = "langs/{$this->language}.js"; | |
$langAssetBundle = TinyMceLangAsset::register($view); | |
$langAssetBundle->js[] = $langFile; | |
$this->clientOptions['language_url'] = $langAssetBundle->baseUrl . "/{$langFile}"; | |
} | |
// @codeCoverageIgnoreEnd | |
$options = Json::encode($this->clientOptions); | |
$js[] = 'var options = ' . $options . ';'; | |
$js[] = 'tinymce.init(options);'; | |
if ($this->triggerSaveOnBeforeValidateForm) { | |
$js[] = "$('#{$id}').parents('form').on('beforeValidate', function() { tinymce.triggerSave(); });"; | |
} | |
$js[] = '$(document).trigger("tinymce:init", ["' . $callback . '", options]);'; | |
$view->registerJs('var ' . $callback . ' = function() { ' . implode("\n", $js) . '}', $view::POS_END); | |
$view->registerJs($callback . '();'); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Your code could reload all tinyMCEs with code like this: