mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
BUG Fix issue with multiple editors breaking plugins
This commit is contained in:
parent
33c2c7bfe7
commit
ce5e15df6e
@ -78,8 +78,7 @@ class TinyMCECombinedGenerator implements TinyMCEScriptGenerator, Flushable
|
|||||||
{
|
{
|
||||||
$tinymceDir = $config->getTinyMCEPath();
|
$tinymceDir = $config->getTinyMCEPath();
|
||||||
|
|
||||||
// Core JS file
|
$files = [ ];
|
||||||
$files = [ $tinymceDir . '/tinymce' ];
|
|
||||||
|
|
||||||
// Add core languages
|
// Add core languages
|
||||||
$language = $config->getOption('language');
|
$language = $config->getOption('language');
|
||||||
@ -137,18 +136,43 @@ class TinyMCECombinedGenerator implements TinyMCEScriptGenerator, Flushable
|
|||||||
return null;
|
return null;
|
||||||
}, $files));
|
}, $files));
|
||||||
|
|
||||||
// Set base URL for where tinymce is loaded from
|
$libContent = $this->getFileContents(Director::baseFolder() . '/' . $tinymceDir . '/tinymce.min.js');
|
||||||
$buffer = "var tinyMCEPreInit={base:'" . Convert::raw2js($tinymceDir) . "',suffix:'.min'};\n";
|
|
||||||
|
// Register vars for config
|
||||||
|
$baseDirJS = Convert::raw2js(Director::absoluteBaseURL());
|
||||||
|
$buffer = [];
|
||||||
|
$buffer[] = <<<SCRIPT
|
||||||
|
(function() {
|
||||||
|
var baseTag = window.document.getElementsByTagName('base');
|
||||||
|
var baseURL = baseTag.length ? baseTag[0].baseURI : '$baseDirJS';
|
||||||
|
SCRIPT;
|
||||||
|
$buffer[] = <<<SCRIPT
|
||||||
|
(function() {
|
||||||
|
// Avoid double-registration
|
||||||
|
if (window.tinymce) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var tinyMCEPreInit = {
|
||||||
|
base: baseURL,
|
||||||
|
suffix: '.min',
|
||||||
|
};
|
||||||
|
$libContent
|
||||||
|
})();
|
||||||
|
SCRIPT;
|
||||||
|
|
||||||
// Load all tinymce script files into buffer
|
// Load all tinymce script files into buffer
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
$buffer .= $this->getFileContents(Director::baseFolder() . '/' . $file) . "\n";
|
$buffer[] = $this->getFileContents(Director::baseFolder() . '/' . $file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$filesList = Convert::raw2js(implode(',', $files));
|
||||||
// Mark all themes, plugins and languages as done
|
// Mark all themes, plugins and languages as done
|
||||||
$buffer .= 'tinymce.each("' . Convert::raw2js(implode(',', $files)) . '".split(","),function(f){tinymce.ScriptLoader.markDone(f);});';
|
$buffer[] = "window.tinymce.each('$filesList'.split(','),".
|
||||||
|
"function(f){tinymce.ScriptLoader.markDone(baseURL+f);});";
|
||||||
|
|
||||||
return $buffer . "\n";
|
$buffer[] = '})();';
|
||||||
|
return implode("\n", $buffer) . "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@ use SilverStripe\Assets\Folder;
|
|||||||
use SilverStripe\Assets\Image;
|
use SilverStripe\Assets\Image;
|
||||||
use SilverStripe\Assets\Tests\Storage\AssetStoreTest\TestAssetStore;
|
use SilverStripe\Assets\Tests\Storage\AssetStoreTest\TestAssetStore;
|
||||||
use SilverStripe\Core\Config\Config;
|
use SilverStripe\Core\Config\Config;
|
||||||
|
use SilverStripe\Core\Manifest\ModuleLoader;
|
||||||
|
use SilverStripe\Core\Manifest\ModuleManifest;
|
||||||
use SilverStripe\Dev\CSSContentParser;
|
use SilverStripe\Dev\CSSContentParser;
|
||||||
use SilverStripe\Dev\FunctionalTest;
|
use SilverStripe\Dev\FunctionalTest;
|
||||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
|
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
|
||||||
@ -66,7 +68,13 @@ class HTMLEditorFieldTest extends FunctionalTest
|
|||||||
public function testCasting()
|
public function testCasting()
|
||||||
{
|
{
|
||||||
// Shim TinyMCE so silverstripe/admin doesn't have to be installed
|
// Shim TinyMCE so silverstripe/admin doesn't have to be installed
|
||||||
TinyMCEConfig::config()->set('base_dir', 'test');
|
$framework = ModuleLoader::getModule('silverstripe/framework');
|
||||||
|
TinyMCEConfig::config()->set(
|
||||||
|
'base_dir',
|
||||||
|
$framework->getRelativeResourcePath(
|
||||||
|
'tests/php/Forms/HTMLEditor/TinyMCECombinedGeneratorTest/tinymce'
|
||||||
|
)
|
||||||
|
);
|
||||||
HtmlEditorField::config()->set('use_gzip', false);
|
HtmlEditorField::config()->set('use_gzip', false);
|
||||||
|
|
||||||
// Test special characters
|
// Test special characters
|
||||||
|
@ -4,6 +4,7 @@ namespace SilverStripe\Forms\Tests\HTMLEditor;
|
|||||||
|
|
||||||
use SilverStripe\Control\Director;
|
use SilverStripe\Control\Director;
|
||||||
use SilverStripe\Core\Injector\Injector;
|
use SilverStripe\Core\Injector\Injector;
|
||||||
|
use SilverStripe\Core\Manifest\ModuleLoader;
|
||||||
use SilverStripe\Dev\SapphireTest;
|
use SilverStripe\Dev\SapphireTest;
|
||||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorConfig;
|
use SilverStripe\Forms\HTMLEditor\HTMLEditorConfig;
|
||||||
use SilverStripe\Forms\HTMLEditor\TinyMCECombinedGenerator;
|
use SilverStripe\Forms\HTMLEditor\TinyMCECombinedGenerator;
|
||||||
@ -59,7 +60,10 @@ class TinyMCECombinedGeneratorTest extends SapphireTest
|
|||||||
"Filename for config: " . json_encode($c->getAttributes()) . " should match expected value"
|
"Filename for config: " . json_encode($c->getAttributes()) . " should match expected value"
|
||||||
);
|
);
|
||||||
$content = $generator->generateContent($c);
|
$content = $generator->generateContent($c);
|
||||||
$this->assertStringStartsWith("var tinyMCEPreInit={base:'tinymce',suffix:'.min'};\n", $content);
|
$this->assertContains(
|
||||||
|
"var baseURL = baseTag.length ? baseTag[0].baseURI : 'http://www.mysite.com/basedir/';\n",
|
||||||
|
$content
|
||||||
|
);
|
||||||
// Main script file
|
// Main script file
|
||||||
$this->assertContains("/* tinymce.js */\n", $content);
|
$this->assertContains("/* tinymce.js */\n", $content);
|
||||||
// Locale file
|
// Locale file
|
||||||
@ -81,10 +85,9 @@ class TinyMCECombinedGeneratorTest extends SapphireTest
|
|||||||
$this->assertContains("/* testtheme/langs/en.js */\n", $content);
|
$this->assertContains("/* testtheme/langs/en.js */\n", $content);
|
||||||
|
|
||||||
// Register done scripts
|
// Register done scripts
|
||||||
$this->assertStringEndsWith(
|
$this->assertContains(
|
||||||
<<<EOS
|
<<<EOS
|
||||||
tinymce.each("tinymce/tinymce.js,tinymce/langs/en.js,mycode/plugin1.js,tinymce/plugins/plugin4/plugin.min.js,tinymce/plugins/plugin4/langs/en.js,tinymce/plugins/plugin5/plugin.js,mycode/plugin6.js,tinymce/themes/testtheme/theme.js,tinymce/themes/testtheme/langs/en.js".split(","),function(f){tinymce.ScriptLoader.markDone(f);});
|
tinymce.each('tinymce/langs/en.js,mycode/plugin1.js,tinymce/plugins/plugin4/plugin.min.js,tinymce/plugins/plugin4/langs/en.js,tinymce/plugins/plugin5/plugin.js,mycode/plugin6.js,tinymce/themes/testtheme/theme.js,tinymce/themes/testtheme/langs/en.js'.split(','),function(f){tinymce.ScriptLoader.markDone(baseURL+f);});
|
||||||
|
|
||||||
EOS
|
EOS
|
||||||
,
|
,
|
||||||
$content
|
$content
|
||||||
|
Loading…
x
Reference in New Issue
Block a user