Issue #2682723 by thpoul, jagjitsingh_drupal, avinashm, maggo: Allow ckeditor_stylesheets to refer to external URL, for e.g. webfonts

8.2.x
Alex Pott 2016-05-04 09:48:21 +01:00
parent f8fd764711
commit 0dd68abecb
7 changed files with 70 additions and 3 deletions

View File

@ -44,7 +44,7 @@ function hook_ckeditor_plugin_info_alter(array &$plugins) {
*
* @param array &$css
* An array of CSS files, passed by reference. This is a flat list of file
* paths relative to the Drupal root.
* paths which can be either relative to the Drupal root or external URLs.
* @param $editor
* The text editor object as returned by editor_load(), for which these files
* are being loaded. Based on this information, it is possible to load the

View File

@ -5,6 +5,7 @@
* Provides integration with the CKEditor WYSIWYG editor.
*/
use Drupal\Component\Utility\UrlHelper;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\editor\Entity\Editor;
@ -85,8 +86,13 @@ function _ckeditor_theme_css($theme = NULL) {
$info = system_get_info('theme', $theme);
if (isset($info['ckeditor_stylesheets'])) {
$css = $info['ckeditor_stylesheets'];
foreach ($css as $key => $path) {
$css[$key] = $theme_path . '/' . $path;
foreach ($css as $key => $url) {
if (UrlHelper::isExternal($url)) {
$css[$key] = $url;
}
else {
$css[$key] = $theme_path . '/' . $url;
}
}
}
if (isset($info['base theme'])) {

View File

@ -194,6 +194,36 @@ class CKEditorLoadingTest extends WebTestBase {
$this->assertTrue(isset($editor_settings['disallowedContent']));
}
/**
* Tests loading of theme's CKEditor stylesheets defined in the .info file.
*/
function testExternalStylesheets() {
$theme_handler = \Drupal::service('theme_handler');
// Case 1: Install theme which has an absolute external CSS URL.
$theme_handler->install(['test_ckeditor_stylesheets_external']);
$theme_handler->setDefault('test_ckeditor_stylesheets_external');
$expected = [
'https://fonts.googleapis.com/css?family=Open+Sans',
];
$this->assertIdentical($expected, _ckeditor_theme_css('test_ckeditor_stylesheets_external'));
// Case 2: Install theme which has an external protocol-relative CSS URL.
$theme_handler->install(['test_ckeditor_stylesheets_protocol_relative']);
$theme_handler->setDefault('test_ckeditor_stylesheets_protocol_relative');
$expected = [
'//fonts.googleapis.com/css?family=Open+Sans',
];
$this->assertIdentical($expected, _ckeditor_theme_css('test_ckeditor_stylesheets_protocol_relative'));
// Case 3: Install theme which has a relative CSS URL.
$theme_handler->install(['test_ckeditor_stylesheets_relative']);
$theme_handler->setDefault('test_ckeditor_stylesheets_relative');
$expected = [
'core/modules/system/tests/themes/test_ckeditor_stylesheets_relative/css/yokotsoko.css',
];
$this->assertIdentical($expected, _ckeditor_theme_css('test_ckeditor_stylesheets_relative'));
}
protected function getThingsToCheck() {
$settings = $this->getDrupalSettings();
return array(

View File

@ -0,0 +1,9 @@
name: Test external CKEditor stylesheets
type: theme
description: 'A theme that uses an external CKEditor stylesheet.'
version: VERSION
base theme: false
core: 8.x
ckeditor_stylesheets:
- https://fonts.googleapis.com/css?family=Open+Sans

View File

@ -0,0 +1,9 @@
name: Test protocol-relative CKEditor stylesheets
type: theme
description: 'A theme that uses a protocol-relative CKEditor stylesheet.'
version: VERSION
base theme: false
core: 8.x
ckeditor_stylesheets:
- //fonts.googleapis.com/css?family=Open+Sans

View File

@ -0,0 +1,4 @@
/**
* @file
* Test CSS asset file for test_ckeditor_stylesheets_relative.theme.
*/

View File

@ -0,0 +1,9 @@
name: Test relative CKEditor stylesheets
type: theme
description: 'A theme that uses a relative CKEditor stylesheet.'
version: VERSION
base theme: false
core: 8.x
ckeditor_stylesheets:
- css/yokotsoko.css