diff --git a/Assets.php b/Assets.php index aa211b2f..16b1f61b 100644 --- a/Assets.php +++ b/Assets.php @@ -13,5 +13,10 @@ class Assets extends AssetBundle{ public $js = [ 'ckeditor.js', + 'js.js', ]; + + public $depends = [ + 'yii\web\YiiAsset', + ]; } \ No newline at end of file diff --git a/CKEditor.php b/CKEditor.php index 8fa8e76e..2b1edb58 100644 --- a/CKEditor.php +++ b/CKEditor.php @@ -128,10 +128,17 @@ public function run() } else { echo Html::textarea($this->name, $this->value, $this->options); } + echo Html::endTag('div'); + $js = [ + 'mihaildev.ckEditor.registerOnChange('.Json::encode($this->options['id']).');' + ]; + + if(isset($this->editorOptions['filebrowserUploadUrl'])) + $js[] = "mihaildev.ckEditor.registerCsrf();"; if(!isset($this->editorOptions['on']['instanceReady'])) - $this->editorOptions['on']['instanceReady'] = new JsExpression("function( ev ){jQuery(CKEDITOR.instances[".Json::encode($this->options['id'])."].container.$).mouseleave(function() {CKEDITOR.instances[".Json::encode($this->options['id'])."].updateElement();});CKEDITOR.instances[".Json::encode($this->options['id'])."].on('blur', function() {CKEDITOR.instances[".Json::encode($this->options['id'])."].updateElement();})}"); + $this->editorOptions['on']['instanceReady'] = new JsExpression("function( ev ){".implode(' ', $js)."}"); if($this->_inline){ $JavaScript = "CKEDITOR.inline("; diff --git a/composer.json b/composer.json index 982b76e8..82765e0b 100644 --- a/composer.json +++ b/composer.json @@ -19,5 +19,11 @@ }, "require": { "yiisoft/yii2": "*" - } + }, + "extra": { + "asset-installer-paths": { + "npm-asset-library": "vendor/npm", + "bower-asset-library": "vendor/bower" + } + } } \ No newline at end of file diff --git a/editor/js.js b/editor/js.js new file mode 100644 index 00000000..a7e48b92 --- /dev/null +++ b/editor/js.js @@ -0,0 +1,29 @@ +if (typeof mihaildev == "undefined" || !mihaildev) { + var mihaildev = {}; +} + +mihaildev.ckEditor = { + registerOnChange: function(id){ + CKEDITOR.instances[id] && CKEDITOR.instances[id].on('change', function () { + CKEDITOR.instances[id].updateElement(); + jQuery('#' + id).trigger('change'); + return false; + }); + }, + isRegisteredCsrf: false, + registerCsrf: function(){ + if(this.isRegisteredCsrf) + return; + + this.isRegisteredCsrf = true; + + yii & jQuery(document).off('click', '.cke_dialog_tabs a:eq(2)').on('click', '.cke_dialog_tabs a:eq(2)', function () { + var form = jQuery('.cke_dialog_ui_input_file iframe').contents().find('form'); + var csrfName = yii.getCsrfParam(); + if (!form.find('input[name=' + csrfName + ']').length) { + var csrfTokenInput = jQuery('').attr({'type': 'hidden', 'name': csrfName}).val(yii.getCsrfToken()); + form.append(csrfTokenInput); + } + }); + } +}; \ No newline at end of file