diff --git a/src/models/crud/WidgetContent.php b/src/models/crud/WidgetContent.php index 56ab2ca..d30e9f5 100644 --- a/src/models/crud/WidgetContent.php +++ b/src/models/crud/WidgetContent.php @@ -3,6 +3,7 @@ namespace hrzg\widget\models\crud; use hrzg\widget\models\crud\base\Widget as BaseWidget; +use hrzg\widget\validators\ClientSideJsonValidator; use hrzg\widget\widgets\Cell; use JsonSchema\Validator; use yii\behaviors\TimestampBehavior; @@ -182,6 +183,12 @@ public function rules() 'operator' => '>', 'type' => 'datetime' ]; + + $rules[] = [ + 'default_properties_json', + ClientSideJsonValidator::class + ]; + // add json schema validation if enabled in module if (!empty(\Yii::$app->controller->module->validateContentSchema)) { $rules['validate_properties_json'] = [ diff --git a/src/models/crud/WidgetContentTranslation.php b/src/models/crud/WidgetContentTranslation.php index baf9479..0f7a43e 100644 --- a/src/models/crud/WidgetContentTranslation.php +++ b/src/models/crud/WidgetContentTranslation.php @@ -11,6 +11,7 @@ use hrzg\widget\models\crud\base\Widget; use hrzg\widget\models\crud\base\WidgetTranslation; +use hrzg\widget\validators\ClientSideJsonValidator; use JsonSchema\Validator; use yii\caching\TagDependency; use yii\helpers\Json; @@ -30,6 +31,12 @@ class WidgetContentTranslation extends WidgetTranslation public function rules() { $rules = parent::rules(); + + $rules[] = [ + 'default_properties_json', + ClientSideJsonValidator::class + ]; + // add json schema validation if enabled in module if (!empty(\Yii::$app->controller->module->validateContentSchema)) { $rules['validate_properties_json'] = [ diff --git a/src/validators/ClientSideJsonValidator.php b/src/validators/ClientSideJsonValidator.php new file mode 100644 index 0000000..ba15407 --- /dev/null +++ b/src/validators/ClientSideJsonValidator.php @@ -0,0 +1,58 @@ + { + mutations.forEach(() => { + if (targetNode.classList.contains('has-error')) { + targetNode.classList.remove('has-error') + observer.disconnect() + } + }) + }) + + observer.observe(targetNode, { attributes: true, attributeFilter: ['class'] }) + JS; + } +} \ No newline at end of file diff --git a/src/views/crud/widget-translation/_form.php b/src/views/crud/widget-translation/_form.php index 750e8c5..ed3994c 100644 --- a/src/views/crud/widget-translation/_form.php +++ b/src/views/crud/widget-translation/_form.php @@ -90,15 +90,22 @@ errorSummary($model) ?> 'pjax-widget-form']) ?> - field($model, 'default_properties_json')->label(false) + field($model, 'default_properties_json', [ + 'template' => '{input}' + ])->label(false) ->widget(\dmstr\jsoneditor\JsonEditorWidget::class, [ 'id' => 'editor', 'schema' => $schema, 'clientOptions' => [ 'theme' => 'bootstrap3', + 'iconlib' => 'fontawesome4', 'disable_collapse' => true, - 'disable_properties' => true, - 'keep_oneof_values' => false + 'disable_properties' => false, + "no_additional_properties" => false, + 'keep_oneof_values' => false, + 'expand_height' => true, + 'ajax' => !empty(\Yii::$app->controller->module->allowAjaxInSchema) ? true : false, + 'show_errors' => $model->hasErrors() ? 'always' : 'interaction' ], ]); ?> diff --git a/src/views/crud/widget-translation/update.php b/src/views/crud/widget-translation/update.php index bb754f6..1dca037 100644 --- a/src/views/crud/widget-translation/update.php +++ b/src/views/crud/widget-translation/update.php @@ -55,7 +55,7 @@ [ 'id' => 'widget-update', 'layout' => 'default', - 'enableClientValidation' => false, + 'enableClientValidation' => true, 'errorSummaryCssClass' => 'error-summary alert alert-error', 'fieldConfig' => [ 'horizontalCssClasses' => [ diff --git a/src/views/crud/widget/_form.php b/src/views/crud/widget/_form.php index b37da04..db0abb4 100644 --- a/src/views/crud/widget/_form.php +++ b/src/views/crud/widget/_form.php @@ -114,7 +114,9 @@ 'pjax-widget-form']) ?> - field($model, 'default_properties_json')->label(false) + field($model, 'default_properties_json', [ + 'template' => '{input}' + ])->label(false) ->widget(\dmstr\jsoneditor\JsonEditorWidget::className(), [ 'id' => 'editor', 'schema' => $schema, @@ -127,6 +129,7 @@ 'keep_oneof_values' => false, 'expand_height' => true, 'ajax' => !empty(\Yii::$app->controller->module->allowAjaxInSchema) ? true : false, + 'show_errors' => $model->hasErrors() ? 'always' : 'interaction' ], ]); ?> diff --git a/src/views/crud/widget/create.php b/src/views/crud/widget/create.php index 550c81e..9bcc65f 100644 --- a/src/views/crud/widget/create.php +++ b/src/views/crud/widget/create.php @@ -39,7 +39,7 @@ [ 'id' => 'widget-create', 'layout' => 'default', - 'enableClientValidation' => false, + 'enableClientValidation' => true, 'errorSummaryCssClass' => 'error-summary alert alert-error', 'fieldConfig' => [ 'horizontalCssClasses' => [ diff --git a/src/views/crud/widget/update.php b/src/views/crud/widget/update.php index 4e0b5f8..e2cc26c 100644 --- a/src/views/crud/widget/update.php +++ b/src/views/crud/widget/update.php @@ -60,7 +60,7 @@ [ 'id' => 'widget-update', 'layout' => 'default', - 'enableClientValidation' => false, + 'enableClientValidation' => true, 'errorSummaryCssClass' => 'error-summary alert alert-error', 'fieldConfig' => [ 'horizontalCssClasses' => [