Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /**
|
Chris@0
|
4 * @file
|
Chris@0
|
5 * Callbacks and theming for the CKEditor toolbar configuration UI.
|
Chris@0
|
6 */
|
Chris@0
|
7
|
Chris@0
|
8 use Drupal\Component\Utility\Html;
|
Chris@0
|
9 use Drupal\Core\Template\Attribute;
|
Chris@0
|
10 use Drupal\Core\Language\LanguageInterface;
|
Chris@0
|
11
|
Chris@0
|
12 /**
|
Chris@0
|
13 * Prepares variables for CKEditor settings toolbar templates.
|
Chris@0
|
14 *
|
Chris@0
|
15 * Default template: ckeditor-settings-toolbar.html.twig.
|
Chris@0
|
16 *
|
Chris@0
|
17 * @param array $variables
|
Chris@0
|
18 * An associative array containing:
|
Chris@0
|
19 * - editor: An editor object.
|
Chris@0
|
20 * - plugins: A list of plugins.
|
Chris@0
|
21 * - active_buttons: A list of disabled buttons.
|
Chris@0
|
22 * - disabled_buttons: A list of disabled buttons.
|
Chris@0
|
23 * - multiple_buttons: A list of multiple buttons that may be added multiple
|
Chris@0
|
24 * times.
|
Chris@0
|
25 */
|
Chris@0
|
26 function template_preprocess_ckeditor_settings_toolbar(&$variables) {
|
Chris@0
|
27 $language_interface = \Drupal::languageManager()->getCurrentLanguage();
|
Chris@0
|
28
|
Chris@0
|
29 // Create lists of active and disabled buttons.
|
Chris@0
|
30 $editor = $variables['editor'];
|
Chris@0
|
31 $plugins = $variables['plugins'];
|
Chris@0
|
32 $buttons = [];
|
Chris@0
|
33 $multiple_buttons = [];
|
Chris@0
|
34 foreach ($plugins as $plugin_buttons) {
|
Chris@0
|
35 foreach ($plugin_buttons as $button_name => $button) {
|
Chris@0
|
36 $button['name'] = $button_name;
|
Chris@0
|
37 if (!empty($button['multiple'])) {
|
Chris@0
|
38 $multiple_buttons[$button_name] = $button;
|
Chris@0
|
39 }
|
Chris@0
|
40 $buttons[$button_name] = $button;
|
Chris@0
|
41 }
|
Chris@0
|
42 }
|
Chris@0
|
43 $button_groups = [];
|
Chris@0
|
44 $active_buttons = [];
|
Chris@0
|
45 $settings = $editor->getSettings();
|
Chris@0
|
46 foreach ($settings['toolbar']['rows'] as $row_number => $row) {
|
Chris@0
|
47 $button_groups[$row_number] = [];
|
Chris@0
|
48 foreach ($row as $group) {
|
Chris@0
|
49 foreach ($group['items'] as $button_name) {
|
Chris@0
|
50 if (isset($buttons[$button_name])) {
|
Chris@0
|
51 // Save a reference to the button's configured toolbar group.
|
Chris@0
|
52 $buttons[$button_name]['group'] = $group['name'];
|
Chris@0
|
53 $active_buttons[$row_number][] = $buttons[$button_name];
|
Chris@0
|
54 if (empty($buttons[$button_name]['multiple'])) {
|
Chris@0
|
55 unset($buttons[$button_name]);
|
Chris@0
|
56 }
|
Chris@0
|
57 // Create a list of all the toolbar button groups.
|
Chris@0
|
58 if (!in_array($group['name'], $button_groups[$row_number])) {
|
Chris@0
|
59 array_push($button_groups[$row_number], $group['name']);
|
Chris@0
|
60 }
|
Chris@0
|
61 }
|
Chris@0
|
62 }
|
Chris@0
|
63 }
|
Chris@0
|
64 }
|
Chris@0
|
65 $disabled_buttons = array_diff_key($buttons, $multiple_buttons);
|
Chris@0
|
66
|
Chris@0
|
67 $rtl = $language_interface->getDirection() === LanguageInterface::DIRECTION_RTL ? '_rtl' : '';
|
Chris@0
|
68
|
Chris@0
|
69 $build_button_item = function ($button, $rtl) {
|
Chris@0
|
70 // Value of the button item.
|
Chris@0
|
71 if (isset($button['image_alternative' . $rtl])) {
|
Chris@0
|
72 $value = $button['image_alternative' . $rtl];
|
Chris@0
|
73 }
|
Chris@0
|
74 elseif (isset($button['image_alternative'])) {
|
Chris@0
|
75 $value = $button['image_alternative'];
|
Chris@0
|
76 }
|
Chris@0
|
77 elseif (isset($button['image']) || isset($button['image' . $rtl])) {
|
Chris@0
|
78 $value = [
|
Chris@0
|
79 '#theme' => 'image',
|
Chris@0
|
80 '#uri' => isset($button['image' . $rtl]) ? $button['image' . $rtl] : $button['image'],
|
Chris@0
|
81 '#title' => $button['label'],
|
Chris@0
|
82 '#prefix' => '<a href="#" role="button" title="' . $button['label'] . '" aria-label="' . $button['label'] . '"><span class="cke_button_icon">',
|
Chris@0
|
83 '#suffix' => '</span></a>',
|
Chris@0
|
84 ];
|
Chris@0
|
85 }
|
Chris@0
|
86 else {
|
Chris@0
|
87 $value = '?';
|
Chris@0
|
88 }
|
Chris@0
|
89
|
Chris@0
|
90 // Build the button attributes.
|
Chris@0
|
91 $attributes = [
|
Chris@0
|
92 'data-drupal-ckeditor-button-name' => $button['name'],
|
Chris@0
|
93 ];
|
Chris@0
|
94 if (!empty($button['attributes'])) {
|
Chris@0
|
95 $attributes = array_merge($attributes, $button['attributes']);
|
Chris@0
|
96 }
|
Chris@0
|
97
|
Chris@0
|
98 // Build the button item.
|
Chris@0
|
99 $button_item = [
|
Chris@0
|
100 'value' => $value,
|
Chris@0
|
101 'attributes' => new Attribute($attributes),
|
Chris@0
|
102 ];
|
Chris@0
|
103 // If this button has group information, add it to the attributes.
|
Chris@0
|
104 if (!empty($button['group'])) {
|
Chris@0
|
105 $button_item['group'] = $button['group'];
|
Chris@0
|
106 }
|
Chris@0
|
107
|
Chris@0
|
108 // Set additional flag on the button if it can occur multiple times.
|
Chris@0
|
109 if (!empty($button['multiple'])) {
|
Chris@0
|
110 $button_item['multiple'] = TRUE;
|
Chris@0
|
111 }
|
Chris@0
|
112
|
Chris@0
|
113 return $button_item;
|
Chris@0
|
114 };
|
Chris@0
|
115
|
Chris@0
|
116 // Assemble list of disabled buttons (which are always a single row).
|
Chris@0
|
117 $variables['active_buttons'] = [];
|
Chris@0
|
118 foreach ($active_buttons as $row_number => $button_row) {
|
Chris@0
|
119 foreach ($button_groups[$row_number] as $group_name) {
|
Chris@0
|
120 $group_name = (string) $group_name;
|
Chris@0
|
121 $variables['active_buttons'][$row_number][$group_name] = [
|
Chris@0
|
122 'group_name_class' => Html::getClass($group_name),
|
Chris@0
|
123 'buttons' => [],
|
Chris@0
|
124 ];
|
Chris@0
|
125 $buttons = array_filter($button_row, function ($button) use ($group_name) {
|
Chris@0
|
126 return (string) $button['group'] === $group_name;
|
Chris@0
|
127 });
|
Chris@0
|
128 foreach ($buttons as $button) {
|
Chris@0
|
129 $variables['active_buttons'][$row_number][$group_name]['buttons'][] = $build_button_item($button, $rtl);
|
Chris@0
|
130 }
|
Chris@0
|
131 }
|
Chris@0
|
132 }
|
Chris@0
|
133 // Assemble list of disabled buttons (which are always a single row).
|
Chris@0
|
134 $variables['disabled_buttons'] = [];
|
Chris@0
|
135 foreach ($disabled_buttons as $button) {
|
Chris@0
|
136 $variables['disabled_buttons'][] = $build_button_item($button, $rtl);
|
Chris@0
|
137 }
|
Chris@0
|
138 // Assemble list of multiple buttons that may be added multiple times.
|
Chris@0
|
139 $variables['multiple_buttons'] = [];
|
Chris@0
|
140 foreach ($multiple_buttons as $button) {
|
Chris@0
|
141 $variables['multiple_buttons'][] = $build_button_item($button, $rtl);
|
Chris@0
|
142 }
|
Chris@0
|
143 }
|