acquia_dam-1.0.0-rc1/src/Plugin/CKEditor5Plugin/MediaEmbedCode.php
src/Plugin/CKEditor5Plugin/MediaEmbedCode.php
<?php
declare(strict_types=1);
namespace Drupal\acquia_dam\Plugin\CKEditor5Plugin;
use Drupal\acquia_dam\EmbedCodeFactory;
use Drupal\acquia_dam\Plugin\media\Source\Asset;
use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
use Drupal\editor\EditorInterface;
use Drupal\media\Entity\MediaType;
/**
* CKEditor 5 asset embed code plugin.
*/
final class MediaEmbedCode extends CKEditor5PluginDefault {
/**
* {@inheritdoc}
*/
public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array {
$dynamic_plugin_config = $static_plugin_config;
$media_bundles = MediaType::loadMultiple();
$items = [];
$dynamic_plugin_config['drupalElementStyles']['mediaEmbedCode'] = [];
foreach ($media_bundles as $bundle) {
$source = $bundle->getSource();
if (!$source instanceof Asset) {
continue;
}
$embed_code_options = EmbedCodeFactory::getSelectOptions($source->getDerivativeId());
foreach ($embed_code_options as $embed_code_id => $embed_code_label) {
$items[] = "drupalElementStyle:mediaEmbedCode:$embed_code_id";
$dynamic_plugin_config['drupalElementStyles']['mediaEmbedCode'][] = [
'name' => $embed_code_id,
'title' => $embed_code_label,
'attributeName' => 'data-embed-code-id',
'attributeValue' => $embed_code_id,
'modelElements' => ['drupalMedia'],
'modelAttributes' => [
'drupalMediaType' => [$bundle->id()],
],
];
}
}
$dynamic_plugin_config['drupalMedia']['toolbar'][] = [
'name' => 'mediaEmbedCode:mediaEmbedCode',
'display' => 'listDropdown',
'defaultItem' => 'drupalElementStyle:mediaEmbedCode:original',
'defaultText' => 'Embed code',
'items' => $items,
];
return $dynamic_plugin_config;
}
}
