add nova
This commit is contained in:
171
nova/src/Fields/Code.php
Normal file
171
nova/src/Fields/Code.php
Normal file
@@ -0,0 +1,171 @@
|
||||
<?php
|
||||
|
||||
namespace Laravel\Nova\Fields;
|
||||
|
||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||
|
||||
class Code extends Field
|
||||
{
|
||||
use SupportsDependentFields;
|
||||
|
||||
/**
|
||||
* The field's component.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $component = 'code-field';
|
||||
|
||||
/**
|
||||
* Indicates if the field is used to manipulate JSON.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $json = false;
|
||||
|
||||
/**
|
||||
* The JSON encoding options.
|
||||
*
|
||||
* @var int|null
|
||||
*/
|
||||
public $jsonOptions;
|
||||
|
||||
/**
|
||||
* Indicates if the element should be shown on the index view.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $showOnIndex = false;
|
||||
|
||||
/**
|
||||
* Indicates the visual height of the Code editor.
|
||||
*
|
||||
* @var string|int
|
||||
*/
|
||||
public $height = 300;
|
||||
|
||||
/**
|
||||
* Resolve the given attribute from the given resource.
|
||||
*
|
||||
* @param mixed $resource
|
||||
* @param string $attribute
|
||||
* @return mixed
|
||||
*/
|
||||
protected function resolveAttribute($resource, $attribute)
|
||||
{
|
||||
$value = parent::resolveAttribute($resource, $attribute);
|
||||
|
||||
if ($this->json) {
|
||||
return json_encode($value, $this->jsonOptions ?? JSON_PRETTY_PRINT);
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hydrate the given attribute on the model based on the incoming request.
|
||||
*
|
||||
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
|
||||
* @param string $requestAttribute
|
||||
* @param \Illuminate\Database\Eloquent\Model|\Laravel\Nova\Support\Fluent $model
|
||||
* @param string $attribute
|
||||
* @return void
|
||||
*/
|
||||
protected function fillAttributeFromRequest(NovaRequest $request, $requestAttribute, $model, $attribute)
|
||||
{
|
||||
if ($request->exists($requestAttribute)) {
|
||||
$model->{$attribute} = $this->json
|
||||
? json_decode($request[$requestAttribute], true)
|
||||
: $request[$requestAttribute];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate that the code field is used to manipulate JSON.
|
||||
*
|
||||
* @param int|null $options
|
||||
* @return $this
|
||||
*/
|
||||
public function json($options = null)
|
||||
{
|
||||
$this->json = true;
|
||||
|
||||
$this->jsonOptions = $options ?? JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE;
|
||||
|
||||
return $this->options(['mode' => 'application/json']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define the language syntax highlighting mode for the field.
|
||||
*
|
||||
* @param string $language
|
||||
* @return $this
|
||||
*/
|
||||
public function language($language)
|
||||
{
|
||||
return $this->options(['mode' => $language]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the Code editor to display all of its contents.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function fullHeight()
|
||||
{
|
||||
$this->height = '100%';
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the visual height of the Code editor to automatic.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function autoHeight()
|
||||
{
|
||||
$this->height = 'auto';
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the visual height of the Code editor.
|
||||
*
|
||||
* @param string|int $height
|
||||
* @return $this
|
||||
*/
|
||||
public function height($height)
|
||||
{
|
||||
$this->height = $height;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set configuration options for the code editor instance.
|
||||
*
|
||||
* @param array $options
|
||||
* @return $this
|
||||
*/
|
||||
public function options($options)
|
||||
{
|
||||
$currentOptions = $this->meta['options'] ?? [];
|
||||
|
||||
return $this->withMeta([
|
||||
'options' => array_merge($currentOptions, $options),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare the field for JSON serialization.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function jsonSerialize(): array
|
||||
{
|
||||
return array_merge(parent::jsonSerialize(), [
|
||||
'height' => $this->height,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user