assetHandler = $assetHandler;
return $this;
}
/**
* Get backend for assets
* @return GeneratedAssetHandler
*/
public function getAssetHandler()
{
return $this->assetHandler;
}
/**
* Generate a script URL for the given config
*
* @param TinyMCEConfig $config
* @return string
*/
public function getScriptURL(TinyMCEConfig $config)
{
// Build URL for this config based on named config and hash of settings
$url = $this->generateFilename($config);
// Pass content generator
return $this->getAssetHandler()->getContentURL($url, function () use ($config) {
return $this->generateContent($config);
});
}
/**
* Build raw config for tinymce
*
* @param TinyMCEConfig $config
* @return string
*/
public function generateContent(TinyMCEConfig $config)
{
$tinymceDir = $config->getTinyMCEResource();
// List of string / ModuleResource references to embed
$files = [];
// Add core languages
$language = $config->getOption('language');
if ($language) {
$files[] = $this->resolveRelativeResource($tinymceDir, "langs/{$language}");
}
// Add plugins, along with any plugin specific lang files
foreach ($config->getPlugins() as $plugin => $path) {
// Add external plugin
if ($path) {
// Skip external urls
if (is_string($path) && !Director::is_site_url($path)) {
continue;
}
// Convert URLS to relative paths
if (is_string($path)) {
$path = Director::makeRelative($path);
}
// Ensure file exists
if ($this->resourceExists($path)) {
$files[] = $path;
}
continue;
}
// Core tinymce plugin
$files[] = $this->resolveRelativeResource($tinymceDir, "plugins/{$plugin}/plugin");
if ($language) {
$files[] = $this->resolveRelativeResource($tinymceDir, "plugins/{$plugin}/langs/{$language}");
}
}
// Add themes
$theme = $config->getTheme();
if ($theme) {
$files[] = $this->resolveRelativeResource($tinymceDir, "themes/{$theme}/theme");
if ($language) {
$files[] = $this->resolveRelativeResource($tinymceDir, "themes/{$theme}/langs/{$language}");
}
}
// Process source files
$files = array_filter($files);
$libResource = $this->resolveRelativeResource($tinymceDir, 'tinymce');
$libContent = $this->getFileContents($libResource);
// Register vars for config
$baseDirJS = Convert::raw2js(Director::absoluteBaseURL());
$name = Convert::raw2js($this->checkName($config));
$buffer = [];
$buffer[] = <<