core/modules/ckeditor/ckeditor.admin.inc | 173 ++++++++++++ core/modules/ckeditor/ckeditor.info | 6 + core/modules/ckeditor/ckeditor.module | 294 ++++++++++++++++++++ core/modules/ckeditor/css/ckeditor-iframe.css | 18 ++ core/modules/ckeditor/css/ckeditor-rtl.css | 18 ++ core/modules/ckeditor/css/ckeditor.admin.css | 170 +++++++++++ core/modules/ckeditor/css/ckeditor.css | 56 ++++ core/modules/ckeditor/images/break-handle.png | 3 + core/modules/ckeditor/images/buttons/about.png | 5 + .../modules/ckeditor/images/buttons/anchor-rtl.png | 5 + core/modules/ckeditor/images/buttons/anchor.png | 4 + core/modules/ckeditor/images/buttons/bidiltr.png | 10 + core/modules/ckeditor/images/buttons/bidirtl.png | 6 + .../modules/ckeditor/images/buttons/blockquote.png | 4 + core/modules/ckeditor/images/buttons/bold.png | 3 + .../ckeditor/images/buttons/bulletedlist-rtl.png | 4 + .../ckeditor/images/buttons/bulletedlist.png | 3 + core/modules/ckeditor/images/buttons/copy-rtl.png | 3 + core/modules/ckeditor/images/buttons/copy.png | 3 + core/modules/ckeditor/images/buttons/cut-rtl.png | 5 + core/modules/ckeditor/images/buttons/cut.png | 5 + core/modules/ckeditor/images/buttons/form.png | 3 + .../ckeditor/images/buttons/horizontalrule.png | 3 + core/modules/ckeditor/images/buttons/image.png | 4 + .../modules/ckeditor/images/buttons/indent-rtl.png | 4 + core/modules/ckeditor/images/buttons/indent.png | 5 + core/modules/ckeditor/images/buttons/italic.png | 4 + .../ckeditor/images/buttons/justifyblock.png | 4 + .../ckeditor/images/buttons/justifycenter.png | 6 + .../ckeditor/images/buttons/justifyleft.png | 4 + .../ckeditor/images/buttons/justifyright.png | 5 + core/modules/ckeditor/images/buttons/link.png | 5 + core/modules/ckeditor/images/buttons/maximize.png | 4 + .../ckeditor/images/buttons/newpage-rtl.png | 3 + core/modules/ckeditor/images/buttons/newpage.png | 3 + .../ckeditor/images/buttons/numberedlist-rtl.png | 7 + .../ckeditor/images/buttons/numberedlist.png | 5 + .../ckeditor/images/buttons/outdent-rtl.png | 3 + core/modules/ckeditor/images/buttons/outdent.png | 5 + .../ckeditor/images/buttons/pagebreak-rtl.png | 3 + core/modules/ckeditor/images/buttons/pagebreak.png | 3 + core/modules/ckeditor/images/buttons/paste-rtl.png | 3 + core/modules/ckeditor/images/buttons/paste.png | 3 + .../ckeditor/images/buttons/pastefromword-rtl.png | 7 + .../ckeditor/images/buttons/pastefromword.png | 4 + .../ckeditor/images/buttons/pastetext-rtl.png | 3 + core/modules/ckeditor/images/buttons/pastetext.png | 5 + core/modules/ckeditor/images/buttons/redo-rtl.png | 4 + core/modules/ckeditor/images/buttons/redo.png | 6 + .../ckeditor/images/buttons/removeformat.png | 3 + .../modules/ckeditor/images/buttons/select-rtl.png | 4 + core/modules/ckeditor/images/buttons/select.png | 5 + core/modules/ckeditor/images/buttons/selectall.png | 5 + .../ckeditor/images/buttons/showblocks-rtl.png | 7 + .../modules/ckeditor/images/buttons/showblocks.png | 6 + .../modules/ckeditor/images/buttons/source-rtl.png | 5 + core/modules/ckeditor/images/buttons/source.png | 4 + .../ckeditor/images/buttons/specialchar.png | 9 + core/modules/ckeditor/images/buttons/strike.png | 3 + core/modules/ckeditor/images/buttons/subscript.png | 8 + .../ckeditor/images/buttons/superscript.png | 4 + core/modules/ckeditor/images/buttons/table.png | 3 + .../ckeditor/images/buttons/textarea-rtl.png | 5 + core/modules/ckeditor/images/buttons/textarea.png | 5 + core/modules/ckeditor/images/buttons/textcolor.png | 3 + .../ckeditor/images/buttons/textfield-rtl.png | 3 + core/modules/ckeditor/images/buttons/textfield.png | 3 + core/modules/ckeditor/images/buttons/underline.png | 7 + core/modules/ckeditor/images/buttons/undo-rtl.png | 6 + core/modules/ckeditor/images/buttons/undo.png | 4 + core/modules/ckeditor/images/buttons/unlink.png | 3 + core/modules/ckeditor/images/group-separator.png | 4 + core/modules/ckeditor/js/ckeditor.admin.js | 111 ++++++++ core/modules/ckeditor/js/ckeditor.js | 32 +++ .../ckeditor/Plugin/editor/editor/CKEditor.php | 251 +++++++++++++++++ core/modules/editor/editor.module | 106 +++++++ core/modules/editor/js/editor.admin.js | 16 ++ .../editor/lib/Drupal/editor/Plugin/EditorBase.php | 6 + .../lib/Drupal/editor/Plugin/EditorInterface.php | 17 ++ 79 files changed, 1564 insertions(+) diff --git a/core/modules/ckeditor/ckeditor.admin.inc b/core/modules/ckeditor/ckeditor.admin.inc new file mode 100644 index 0000000..cd56d37 --- /dev/null +++ b/core/modules/ckeditor/ckeditor.admin.inc @@ -0,0 +1,173 @@ +direction) && $language->direction === LANGUAGE_RTL ? 'rtl' : 'ltr'; + + // Create lists of active and disabled buttons. + $editor = $variables['editor']; + $plugins = $variables['plugins']; + $buttons = array(); + $variables['multiple_buttons'] = array(); + foreach ($plugins as $plugin) { + if (isset($plugin['buttons'])) { + foreach ($plugin['buttons'] as $button_name => $button) { + if (!empty($button['multiple'])) { + $variables['multiple_buttons'][$button_name] = $button; + } + $button['name'] = $button_name; + $buttons[$button_name] = $button; + } + } + } + $variables['active_buttons'] = array(); + foreach ($editor->settings['toolbar']['buttons'] as $row_number => $row) { + foreach ($row as $button_name) { + if (isset($buttons[$button_name])) { + $variables['active_buttons'][$row_number][] = $buttons[$button_name]; + if (empty($buttons[$button_name]['multiple'])) { + unset($buttons[$button_name]); + } + } + } + } + $variables['disabled_buttons'] = array_diff_key($buttons, $variables['multiple_buttons']); +} + +/** + * Displays the toolbar configuration for CKEditor. + */ +function theme_ckeditor_settings_toolbar($variables) { + $editor = $variables['editor']; + $plugins = $variables['plugins']; + $rtl = $variables['language_direction'] === 'rtl' ? '_rtl' : ''; + + // Assemble items to be added to active button rows. + foreach ($variables['active_buttons'] as $row_number => $row_buttons) { + foreach ($row_buttons as $button) { + $button_name = $button['name']; + if (isset($button['image_alternative'])) { + $data = $button['image_alternative']; + } + elseif (isset($button['image'])) { + $data = theme('image', array('uri' => $button['image' . $rtl], 'title' => $button['label'])); + } + else { + $data = '?'; + } + $button_item = array( + 'data' => $data, + 'data-button-name' => $button_name, + ); + if (!empty($button['multiple'])) { + $button['attributes']['class'][] = 'ckeditor-multiple-button'; + } + if (!empty($button['attributes'])) { + $button_item = array_merge($button_item, $button['attributes']); + } + $active_buttons[$row_number][] = $button_item; + } + } + // Assemble list of disabled buttons (which are always a single row). + foreach ($variables['disabled_buttons'] as $button_name => $button) { + if (isset($button['image_alternative'])) { + $data = $button['image_alternative']; + } + elseif (isset($button['image'])) { + $data = theme('image', array('uri' => $button['image' . $rtl], 'title' => $button['label'])); + } + else { + $data = '?'; + } + $button_item = array( + 'data' => $data, + 'data-button-name' => $button_name, + ); + if (isset($button['attributes'])) { + $button_item = array_merge($button_item, $button['attributes']); + } + $disabled_buttons[] = $button_item; + } + // Assemble list of multiple buttons that may be added multiple times. + foreach ($variables['multiple_buttons'] as $button_name => $button) { + if (isset($button['image_alternative'])) { + $data = $button['image_alternative']; + } + elseif (isset($button['image'])) { + $data = theme('image', array('uri' => $button['image' . $rtl], 'title' => $button['label'])); + } + else { + $data = '?'; + } + $button_item = array( + 'data' => $data, + 'data-button-name' => $button_name, + ); + $button['attributes']['class'][] = 'ckeditor-multiple-button'; + if (isset($button['attributes'])) { + $button_item = array_merge($button_item, $button['attributes']); + } + $multiple_buttons[] = $button_item; + } + + // We don't use theme_item_list() below in case there are no buttons in the + // active or disabled list, as theme_item_list() will not print an empty UL. + $output = ''; + $output .= '' . t('Active toolbar') . ''; + $output .= '
'; + + $output .= '' . t('Available buttons') . ''; + $output .= ' '; + + return $output; +} diff --git a/core/modules/ckeditor/ckeditor.info b/core/modules/ckeditor/ckeditor.info new file mode 100644 index 0000000..9c40ac2 --- /dev/null +++ b/core/modules/ckeditor/ckeditor.info @@ -0,0 +1,6 @@ +name = CKEditor +description = WYSIWYG editing for rich text fields using CKEditor. +package = Core +core = 8.x +version = VERSION +dependencies[] = editor diff --git a/core/modules/ckeditor/ckeditor.module b/core/modules/ckeditor/ckeditor.module new file mode 100644 index 0000000..3587a5a --- /dev/null +++ b/core/modules/ckeditor/ckeditor.module @@ -0,0 +1,294 @@ + 'Loads the main CKEditor library.', + 'website' => 'http://ckeditor.com/', + 'version' => '4.0.1', + 'js' => array( + 'core/misc/ckeditor/ckeditor.js' => array(), + ), + ); + + $module_path = drupal_get_path('module', 'ckeditor'); + $settings = array( + 'ckeditor' => array( + 'modulePath' => drupal_get_path('module', 'ckeditor'), + ), + ); + $libraries['drupal.ckeditor'] = array( + 'title' => 'Drupal behavior to enable CKEditor on textareas.', + 'version' => VERSION, + 'js' => array( + $module_path . '/js/ckeditor.js' => array(), + array('data' => $settings, 'type' => 'setting'), + ), + 'dependencies' => array( + array('editor', 'drupal.editor'), + array('ckeditor', 'ckeditor'), + ) + ); + $libraries['drupal.ckeditor.admin'] = array( + 'title' => 'Drupal behavior to enable CKEditor on textareas.', + 'version' => VERSION, + 'js' => array( + $module_path . '/js/ckeditor.admin.js' => array(), + ), + 'css' => array( + $module_path . '/css/ckeditor.admin.css' => array(), + ), + 'dependencies' => array( + array('system', 'jquery.once'), + array('system', 'jquery.ui.sortable'), + array('system', 'jquery.ui.draggable'), + ) + ); + + return $libraries; +} + +/** + * Implements hook_theme(). + */ +function ckeditor_theme() { + return array( + 'ckeditor_settings_toolbar' => array( + 'file' => 'ckeditor.admin.inc', + 'variables' => array('editor' => NULL, 'plugins' => NULL), + ), + ); +} + +/** + * Implements hook_init(). + */ +function ckeditor_init() { + // Add our CSS file that adds common needed classes, such as align-left, + // align-right, underline, indent, etc. + drupal_add_css(drupal_get_path('module', 'ckeditor') . '/css/ckeditor.css'); +} + +/** + * Retrieves the full list of installed CKEditor plugins. + */ +function ckeditor_plugins() { + $plugins = module_invoke_all('ckeditor_plugins'); + drupal_alter('ckeditor_plugins', $plugins); + return $plugins; +} + +/** + * Implements hook_ckeditor_plugins(). + * + * Return a list of all plugins provided by this module. + */ +function ckeditor_ckeditor_plugins() { + $image_prefix = drupal_get_path('module', 'ckeditor') . '/images/buttons/'; + $buttons = array( + 'Bold' => array( + 'label' => t('Bold'), + 'required_tags' => array('strong'), + ), + 'Italic' => array( + 'label' => t('Italic'), + 'required_tags' => array('em'), + ), + 'Underline' => array( + 'label' => t('Underline'), + // A class is used on spans for underline. + 'required_tags' => array('span'), + ), + 'Strike' => array( + 'label' => t('Strike-through'), + 'required_tags' => array('del'), + ), + 'JustifyLeft' => array( + 'label' => t('Align left'), + 'required_tags' => array('p'), + ), + 'JustifyCenter' => array( + 'label' => t('Align center'), + 'required_tags' => array('p'), + ), + 'JustifyRight' => array( + 'label' => t('Align right'), + 'required_tags' => array('p'), + ), + 'JustifyBlock' => array( + 'label' => t('Justify'), + 'required_tags' => array('p'), + ), + 'BulletedList' => array( + 'label' => t('Bullet list'), + 'image_rtl' => $image_prefix . '/bulletedlist-rtl.png', + 'required_tags' => array('ul', 'li'), + ), + 'NumberedList' => array( + 'label' => t('Numbered list'), + 'image_rtl' => $image_prefix . '/numberedlist-rtl.png', + 'required_tags' => array('ol', 'li'), + ), + 'Outdent' => array( + 'label' => t('Outdent'), + 'image_rtl' => $image_prefix . '/outdent-rtl.png', + 'required_tags' => array('p'), + ), + 'Indent' => array( + 'label' => t('Indent'), + 'image_rtl' => $image_prefix . '/indent-rtl.png', + 'required_tags' => array('p'), + ), + 'Undo' => array( + 'label' => t('Undo'), + 'image_rtl' => $image_prefix . '/undo-rtl.png', + ), + 'Redo' => array( + 'label' => t('Redo'), + 'image_rtl' => $image_prefix . '/redo-rtl.png', + ), + 'Link' => array( + 'label' => t('Link'), + 'required_tags' => array('a'), + ), + 'Unlink' => array( + 'label' => t('Unlink'), + 'required_tags' => array('a'), + ), + 'Anchor' => array( + 'image_rtl' => $image_prefix . '/anchor-rtl.png', + 'label' => t('Anchor'), + 'required_tags' => array('a'), + ), + 'Superscript' => array( + 'label' => t('Superscript'), + 'required_tags' => array('sup'), + ), + 'Subscript' => array( + 'label' => t('Subscript'), + 'required_tags' => array('sub'), + ), + 'Blockquote' => array( + 'label' => t('Blockquote'), + 'required_tags' => array('blockquote'), + ), + 'Source' => array( + 'label' => t('Source code'), + ), + 'HorizontalRule' => array( + 'label' => t('Horizontal rule'), + 'required_tags' => array('hr'), + ), + 'Cut' => array( + 'label' => t('Cut'), + ), + 'Copy' => array( + 'label' => t('Copy'), + ), + 'Paste' => array( + 'label' => t('Paste'), + ), + 'PasteText' => array( + 'label' => t('Paste Text'), + 'image_rtl' => $image_prefix . '/pastetext-rtl.png', + ), + 'PasteFromWord' => array( + 'label' => t('Paste from Word'), + 'image_rtl' => $image_prefix . '/pastefromword-rtl.png', + ), + 'ShowBlocks' => array( + 'label' => t('Show blocks'), + 'image_rtl' => $image_prefix . '/showblocks-rtl.png', + ), + 'RemoveFormat' => array( + 'label' => t('Remove format'), + ), + 'SpecialChar' => array( + 'label' => t('Character map'), + ), + 'Format' => array( + 'label' => t('HTML block format'), + 'image_alternative' => ' ', + ), + 'Styles' => array( + 'label' => t('Font style'), + 'image_alternative' => ' ', + ), + 'Image' => array( + 'label' => t('Image'), + 'required_tags' => array('img'), + ), + 'Table' => array( + 'label' => t('Table'), + 'required_tags' => array('table', 'thead', 'tbody', 'tr', 'td', 'th'), + ), + 'Maximize' => array( + 'label' => t('Maximize'), + ), + '|' => array( + 'label' => t('Group separator'), + 'image_alternative' => ' ', + 'attributes' => array('class' => array('ckeditor-group-button-separator')), + 'multiple' => TRUE, + ), + '-' => array( + 'label' => t('Separator'), + 'image_alternative' => ' ', + 'attributes' => array('class' => array('ckeditor-button-separator')), + 'multiple' => TRUE, + ), + ); + + // Populate image locations, which all match button names. + foreach ($buttons as $button_name => &$button) { + if (!isset($button['image_alternative']) && !isset($button['image'])) { + // Because we know the list of strings, drupal_strtolower() is not needed. + $button['image'] = $image_prefix . strtolower($button_name) . '.png'; + } + } + + // List all the basic plugin buttons as an "internal" plugin. + $plugins['default'] = array( + 'buttons' => $buttons, + 'internal' => TRUE, + ); + + return $plugins; +} + +/** + * Retrieves the default theme's CKEditor stylesheets defined in the .info file. + * + * Themes may specify iFrame-specific CSS files for use with CKEditor by + * including a "ckeditor_stylesheets" key in the theme .info file. + * + * @code + * ckeditor_stylesheets[] = css/ckeditor-iframe.css + * @endcode + */ +function _ckeditor_theme_css($theme = NULL) { + $css = array(); + if (!isset($theme)) { + $theme = variable_get('theme_default'); + } + if ($theme_path = drupal_get_path('theme', $theme)) { + $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; + } + } + if (isset($info['base theme'])) { + $css = array_merge($css, _ckeditor_theme_css($info['base theme'])); + } + } + return $css; +} diff --git a/core/modules/ckeditor/css/ckeditor-iframe.css b/core/modules/ckeditor/css/ckeditor-iframe.css new file mode 100644 index 0000000..8dda5d0 --- /dev/null +++ b/core/modules/ckeditor/css/ckeditor-iframe.css @@ -0,0 +1,18 @@ +/** + * CSS added to iFrame-based instances only. + */ +body { + font-family: Arial, Verdana, sans-serif; + font-size: 12px; + color: #222; + background-color: #fff; + margin: 8px; +} + +ol,ul,dl { + /* IE7: reset rtl list margin. (CKEditor issue #7334) */ + *margin-right: 0px; + /* Preserved spaces for list items with text direction other than the list. + * (CKEditor issues #6249,#8049) */ + padding: 0 40px; +} diff --git a/core/modules/ckeditor/css/ckeditor-rtl.css b/core/modules/ckeditor/css/ckeditor-rtl.css new file mode 100644 index 0000000..1e2d05b --- /dev/null +++ b/core/modules/ckeditor/css/ckeditor-rtl.css @@ -0,0 +1,18 @@ +/** + * RTL styles used by CKEditor. Added to front-end theme and iFrame editors. + */ +.align-left { + text-align: right; +} +.align-right { + text-align: left; +} +.indent1 { + margin: 0 40px 0 0; +} +.indent2 { + margin: 0 80px 0 0; +} +.indent3 { + margin: 0 120px 0 0; +} diff --git a/core/modules/ckeditor/css/ckeditor.admin.css b/core/modules/ckeditor/css/ckeditor.admin.css new file mode 100644 index 0000000..2e4027c --- /dev/null +++ b/core/modules/ckeditor/css/ckeditor.admin.css @@ -0,0 +1,170 @@ +/** + * @file + * Styles for configuration of CKEditor module. + */ + +.ckeditor-toolbar-active { + border: 1px solid #B6B6B6; + padding: 6px 8px 2px; + box-shadow: 0 1px 0 white inset; + background: #CFD1CF; + background-image: -webkit-gradient(linear, left top, left bottom, from(whiteSmoke), to(#CFD1CF)); + background-image: -moz-linear-gradient(top, whiteSmoke, #CFD1CF); + background-image: -o-linear-gradient(top, whiteSmoke, #CFD1CF); + background-image: -ms-linear-gradient(top, whiteSmoke, #CFD1CF); + background-image: linear-gradient(top, whiteSmoke, #CFD1CF); + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf'); + margin: 5px 0; + overflow: nowrap; +} +.ckeditor-toolbar-disabled { + margin: 5px 0; +} + +ul.ckeditor-buttons { + min-height: 26px; + min-width: 26px; + list-style: none; + + float: left; + clear: left; + padding: 0; + margin: 0 6px 5px 0; + border: 1px solid #A6A6A6; + border-bottom-color: #979797; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: 0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .5),0 0 2px rgba(255, 255, 255, .15) inset,0 1px 0 rgba(255, 255, 255, .15) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, .5),0 0 2px rgba(255, 255, 255, .15) inset,0 1px 0 rgba(255, 255, 255, .15) inset; +} +ul.ckeditor-buttons li { + display: inline-block; + height: 18px; + padding: 4px 6px; + outline: none; + cursor: move; + float: left; + border: 0; + white-space: nowrap; + + background: #E4E4E4; + background-image: -webkit-gradient(linear,left top,left bottom,from(white),to(#E4E4E4)); + background-image: -moz-linear-gradient(top,white,#E4E4E4); + background-image: -webkit-linear-gradient(top,white,#E4E4E4); + background-image: -o-linear-gradient(top,white,#E4E4E4); + background-image: -ms-linear-gradient(top,white,#E4E4E4); + background-image: linear-gradient(top,white,#E4E4E4); + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4'); +} +ul.ckeditor-buttons li:first-child { + -moz-border-top-left-radius: 2px; + -moz-border-bottom-left-radius: 2px; + -webkit-border-top-left-radius: 2px; + -webkit-border-bottom-left-radius: 2px; + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} +ul.ckeditor-buttons li:last-child { + -moz-border-top-right-radius: 2px; + -moz-border-bottom-right-radius: 2px; + -webkit-border-top-right-radius: 2px; + -webkit-border-bottom-right-radius: 2px; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; +} +ul.ckeditor-buttons li.ckeditor-button-placeholder { + background: #333; + opacity: 0.3; +} +ul.ckeditor-multiple-buttons { + padding: 2px; + margin: 0; + list-style: none; + float: left; +} +ul.ckeditor-multiple-buttons li { + padding: 2px 0; + margin: 0; + display: inline-block; + height: 18px; + cursor: move; + float: left; +} +.ckeditor-multiple-label { + float: left; + padding: 4px; +} +ul.ckeditor-buttons li.ckeditor-group-button-separator, +ul.ckeditor-multiple-buttons li.ckeditor-group-button-separator { + background: url(../images/group-separator.png) no-repeat center center; + width: 13px; + padding: 0; + height: 29px; + margin: -1px -3px -2px; + position: relative; + z-index: 10; +} +ul.ckeditor-buttons li.ckeditor-button-separator { + width: 2px; + padding: 0 4px; + height: 26px; + margin: 0 -4px; + position: relative; + z-index: 10; + + background: #E4E4E4; + background-image: -webkit-gradient(linear,left top,left bottom,from(white),to(#E4E4E4)); + background-image: -moz-linear-gradient(top,white,#E4E4E4); + background-image: -webkit-linear-gradient(top,white,#E4E4E4); + background-image: -o-linear-gradient(top,white,#E4E4E4); + background-image: -ms-linear-gradient(top,white,#E4E4E4); + background-image: linear-gradient(top,white,#E4E4E4); + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4'); +} +ul.ckeditor-multiple-buttons li.ckeditor-button-separator { + width: 2px; + padding: 0; + height: 26px; + margin: 0 10px; +} +.ckeditor-separator { + background-color: silver; + background-color: rgba(0, 0, 0, .2); + margin: 5px 0; + height: 18px; + width: 1px; + display: block; + -webkit-box-shadow: 1px 0 1px rgba(255, 255, 255, .5); + -moz-box-shadow: 1px 0 1px rgba(255,255,255,.5); + box-shadow: 1px 0 1px rgba(255, 255, 255, .5) +} +.ckeditor-button-arrow { + width: 0; + text-align: center; + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-top: 3px solid #333; + display: inline-block; + margin: 0 4px 2px; +} + +.ckeditor-row-controls { + float: right; + font-size: 18px; + width: 40px; + text-align: right; +} +.ckeditor-row-controls a { + display: inline-block; + padding: 6px 2px; + height: 16px; + width: 16px; + line-height: 0.9; + font-weight: bold; + color: #333; +} +.ckeditor-row-controls a:hover { + text-decoration: none; +} diff --git a/core/modules/ckeditor/css/ckeditor.css b/core/modules/ckeditor/css/ckeditor.css new file mode 100644 index 0000000..94bdcf3 --- /dev/null +++ b/core/modules/ckeditor/css/ckeditor.css @@ -0,0 +1,56 @@ +/** + * Common styles used by CKEditor. Added to front-end theme and iFrame editors. + */ +.align-left { + text-align: left; /* RTL */ +} +.align-right { + text-align: right; /* RTL */ +} +.align-center { + text-align: center; +} +.align-justify { + text-align: justify; +} +img.align-left { + float: left; /* RTL */ +} +img.align-right { + float: right; /* RTL */ +} +img.align-center { + margin-left: auto; + margin-right: auto; + display: block; +} +img.full-width { + width: 100%; + height: auto; +} +.underline { + text-decoration: underline; +} +.indent1 { + margin: 0 0 0 40px; /* RTL */ +} +.indent2 { + margin: 0 0 0 80px; /* RTL */ +} +.indent3 { + margin: 0 0 0 120px; /* RTL */ +} +.caption-left { + float: left; /* RTL */ +} +.caption-right { + float: right; /* RTL */ +} +.caption-center { + text-align: center; + margin-left: auto; + margin-right: auto; +} +.align-justify { + text-align: justify; +} diff --git a/core/modules/ckeditor/images/break-handle.png b/core/modules/ckeditor/images/break-handle.png new file mode 100644 index 0000000..23640bb --- /dev/null +++ b/core/modules/ckeditor/images/break-handle.png @@ -0,0 +1,3 @@ +PNG + + IHDR M, pHYs !IDATc9s2 H#ɰUe6l> * IENDB` \ No newline at end of file diff --git a/core/modules/ckeditor/images/buttons/about.png b/core/modules/ckeditor/images/buttons/about.png new file mode 100644 index 0000000..ac976e9 --- /dev/null +++ b/core/modules/ckeditor/images/buttons/about.png @@ -0,0 +1,5 @@ +PNG + + IHDR a bKGD pHYs B(x eIDAT8uOSa罗r.%mj $25A0@8"b_PHX+m":C}wsq D4mnZFRjF ԹXD,M7y)"b6h0 0#H(3@oo/j|>?EdRk*( +a$Idmlll^oi&&&/B pj`l6Zf{K˿B.<Z_l2<<|/HV,,,$Tˡ Q._gGGGY\\OMMWkMh8xx<dR!A\_iiNRضR!%"J)D(edzbxy&5aY֞8LOO}mooB#n2atXE{{;"rD=VuRD"D$aY֫0.gsAfV>'Ln{kAѠX,zpxw- +#b %tEXtdate:create 2012-10-25T12:48:11+02:00D2 %tEXtdate:modify 2012-10-25T12:48:11+02:00p tEXtSoftware www.inkscape.org< IENDB` \ No newline at end of file diff --git a/core/modules/ckeditor/images/buttons/anchor-rtl.png b/core/modules/ckeditor/images/buttons/anchor-rtl.png new file mode 100644 index 0000000..9017d6e --- /dev/null +++ b/core/modules/ckeditor/images/buttons/anchor-rtl.png @@ -0,0 +1,5 @@ +PNG + + IHDR a bKGD pHYs B(x IDAT8ˍJA?3IT z bo7O>Dz)^$E[5`7ݙouWmS|1KKKh4!`1h.//?IB MS9ρ7Q:88r(MS$zﳳIEp84P. tDYdYF E@ ,hۤi +$nEι!4ưHWP%!:E,)˲c EQZ1I(˲N{w +!s$IMM3IӔ4Mv}{\11pymmj{{[[[[Y;>::z/黤/%} N#L&8FKI?<%%Iz-?Hz$$ͦsdR纻 NOO;EZ-y1k-IYkb/Uྐྵ:_!6˼h, 2'=Il64(p:l| %tEXtdate:create 2012-10-25T12:48:11+02:00D2 %tEXtdate:modify 2012-10-25T12:48:11+02:00p tEXtSoftware www.inkscape.org< IENDB` \ No newline at end of file diff --git a/core/modules/ckeditor/images/buttons/anchor.png b/core/modules/ckeditor/images/buttons/anchor.png new file mode 100644 index 0000000..d2ccb8b --- /dev/null +++ b/core/modules/ckeditor/images/buttons/anchor.png @@ -0,0 +1,4 @@ +PNG + + IHDR a bKGD pHYs B(x IDAT8ˍN[Acs)JȊL"Hy + ]W u