Add schema information for HTMLEditorField

This allows React form builders (or other such view layer builders in a
headless environment) to obtain the details that would otherwise only be
rendered in a PHP side template. Some of the details are critical for
rendering correctly, and are necessary to be passed through -
particularly when moving toward replacing the Entwine initiator for
TinyMCE with a React component in `silverstripe/admin`.

I new interface method has been added to the abstract class for HTML
editor configs in order to facilitate this. It is not itself abstract as
this would break backwards compatiblity with any existing custom config
(aside from the TinyMCE one which we're editing here), which is most
certainly not what we want.
This commit is contained in:
Dylan Wagstaff 2018-09-03 12:11:35 +12:00
parent 83e461abbf
commit f13ee4486d
3 changed files with 32 additions and 0 deletions

View File

@ -224,4 +224,17 @@ abstract class HTMLEditorConfig
* Initialise the editor on the client side
*/
abstract public function init();
/**
* Provide additional schema data for the field this object configures
*
* @return array
*/
public function getConfigSchemaData()
{
return [
'attributes' => $this->getAttributes(),
'editorjs' => null,
];
}
}

View File

@ -3,6 +3,7 @@
namespace SilverStripe\Forms\HTMLEditor;
use SilverStripe\Assets\Shortcodes\ImageShortcodeProvider;
use SilverStripe\Forms\FormField;
use SilverStripe\Forms\TextareaField;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\DataObjectInterface;
@ -23,6 +24,10 @@ class HTMLEditorField extends TextareaField
'Value' => 'HTMLText',
];
protected $schemaDataType = FormField::SCHEMA_DATA_TYPE_HTML;
protected $schemaComponent = 'HtmlEditorField';
/**
* Use TinyMCE's GZIP compressor
*
@ -185,4 +190,12 @@ class HTMLEditorField extends TextareaField
$this->getEditorConfig()->init();
return parent::Field($properties);
}
public function getSchemaStateDefaults()
{
$stateDefaults = parent::getSchemaStateDefaults();
$config = $this->getEditorConfig();
$stateDefaults['data'] = $config->getConfigSchemaData();
return $stateDefaults;
}
}

View File

@ -713,6 +713,12 @@ class TinyMCEConfig extends HTMLEditorConfig
Requirements::javascript($this->getScriptURL());
}
public function getConfigSchemaData()
{
$data = parent::getConfigSchemaData();
$data['editorjs'] = $this->getScriptURL();
return $data;
}
/**
* Get the current tinyMCE language