eluhr/yii2-jedi-editor

Yii2 asset bundle and input widget for germanbisurgi/jedi

Installs: 411

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 1

Open Issues: 0

Type:yii2-extension

0.2.12 2024-12-20 08:54 UTC

This package is auto-updated.

Last update: 2024-12-20 08:57:44 UTC


README

Yii2 AssetBundle and Input Widget for germanbisurgi/jedi

Installation

The preferred way to install this extension is through composer.

Either run

composer require eluhr/yii2-jedi-editor

or add

"eluhr/yii2-jedi-editor": "*"

to the require section of your composer.json file.

Usage

<?php
/**
 * @var \yii\base\Model $model
 * @var yii\web\View $this
*/

use eluhr\jedi\widgets\JediEditor;
use yii\web\JsExpression;

// Schema can either be of type string, array or stdClass.
$schema1 = '{}';
$schema2 = [];
 
// Without a model
echo JediEditor::widget([
    'id' => 'my-jedi',
    'name' => 'editor',
    'schema' => $schema1,
    // Update theme, see: https://github.com/germanbisurgi/jedi/tree/main?tab=readme-ov-file#theme
    'theme' => JediEditor::THEME_THEME_BOOTSTRAP3,
    'pluginOptions' => [
        // No ref parser
        'refParser' => null
    ]
]);

// Example on how to listen to change event
$this->registerJs(<<<JS
window['my-jedi'].on('change', () => {
    console.log(window['my-jedi'].getValue())
})
JS);

// With a model
echo JediEditor::widget([
    'model' => $model,
    'attribute' => 'attribute_name',
    'schema' => $schema2,
    'pluginOptions' => [
        // You can also set the theme like this
        'theme' => new JsExpression('new Jedi.ThemeBootstrap3()'),
        'showErrors' => 'always', // "change" or "never" is also possible
    ],
    'disabled' => false
]);

Example model

<?php

namespace app\models;

use eluhr\jedi\validators\JsonSchemaValidator;
use app\filters\MyCustomFilter;
use yii\base\Model;

class MyModel extends Model
{

    public $title;
    public $value;

    public function rules()
    {
        $rules = parent::rules();
        $rules[] = [
            'title',
            'integer',
            'enableClientValidation' => false,
        ];
        $rules[] = [
            'value',
            JsonSchemaValidator::class,
            'schema' => static::getJsonSchema(),
            'filters' => static::getJsonSchemaFilters()
        ];
        return $rules;
    }

    public function getJsonSchemaFilters(): array
    {
        return [
            'custom' => new MyCustomFilter() // Implement your custom filter if needed. See: https://opis.io/json-schema/2.x/php-filter.html Filter must inherit from Opis\JsonSchema\Filter
        ];
    }

    public static function getJsonSchema(): string
    {
        return <<<JSON
{
  "title": "Test",
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "\$filters": {
        "\$func": "custom"
      }
    }
  }
}
JSON;
    }
}
?>

For further information about the usage of the jedi editor please refer to the docs