Chris@0: getCurrentLanguage(); Chris@0: Chris@0: // Create lists of active and disabled buttons. Chris@0: $editor = $variables['editor']; Chris@0: $plugins = $variables['plugins']; Chris@0: $buttons = []; Chris@0: $multiple_buttons = []; Chris@0: foreach ($plugins as $plugin_buttons) { Chris@0: foreach ($plugin_buttons as $button_name => $button) { Chris@0: $button['name'] = $button_name; Chris@0: if (!empty($button['multiple'])) { Chris@0: $multiple_buttons[$button_name] = $button; Chris@0: } Chris@0: $buttons[$button_name] = $button; Chris@0: } Chris@0: } Chris@0: $button_groups = []; Chris@0: $active_buttons = []; Chris@0: $settings = $editor->getSettings(); Chris@0: foreach ($settings['toolbar']['rows'] as $row_number => $row) { Chris@0: $button_groups[$row_number] = []; Chris@0: foreach ($row as $group) { Chris@0: foreach ($group['items'] as $button_name) { Chris@0: if (isset($buttons[$button_name])) { Chris@0: // Save a reference to the button's configured toolbar group. Chris@0: $buttons[$button_name]['group'] = $group['name']; Chris@0: $active_buttons[$row_number][] = $buttons[$button_name]; Chris@0: if (empty($buttons[$button_name]['multiple'])) { Chris@0: unset($buttons[$button_name]); Chris@0: } Chris@0: // Create a list of all the toolbar button groups. Chris@0: if (!in_array($group['name'], $button_groups[$row_number])) { Chris@0: array_push($button_groups[$row_number], $group['name']); Chris@0: } Chris@0: } Chris@0: } Chris@0: } Chris@0: } Chris@0: $disabled_buttons = array_diff_key($buttons, $multiple_buttons); Chris@0: Chris@0: $rtl = $language_interface->getDirection() === LanguageInterface::DIRECTION_RTL ? '_rtl' : ''; Chris@0: Chris@0: $build_button_item = function ($button, $rtl) { Chris@0: // Value of the button item. Chris@0: if (isset($button['image_alternative' . $rtl])) { Chris@0: $value = $button['image_alternative' . $rtl]; Chris@0: } Chris@0: elseif (isset($button['image_alternative'])) { Chris@0: $value = $button['image_alternative']; Chris@0: } Chris@0: elseif (isset($button['image']) || isset($button['image' . $rtl])) { Chris@0: $value = [ Chris@0: '#theme' => 'image', Chris@0: '#uri' => isset($button['image' . $rtl]) ? $button['image' . $rtl] : $button['image'], Chris@0: '#title' => $button['label'], Chris@0: '#prefix' => '', Chris@0: '#suffix' => '', Chris@0: ]; Chris@0: } Chris@0: else { Chris@0: $value = '?'; Chris@0: } Chris@0: Chris@0: // Build the button attributes. Chris@0: $attributes = [ Chris@0: 'data-drupal-ckeditor-button-name' => $button['name'], Chris@0: ]; Chris@0: if (!empty($button['attributes'])) { Chris@0: $attributes = array_merge($attributes, $button['attributes']); Chris@0: } Chris@0: Chris@0: // Build the button item. Chris@0: $button_item = [ Chris@0: 'value' => $value, Chris@0: 'attributes' => new Attribute($attributes), Chris@0: ]; Chris@0: // If this button has group information, add it to the attributes. Chris@0: if (!empty($button['group'])) { Chris@0: $button_item['group'] = $button['group']; Chris@0: } Chris@0: Chris@0: // Set additional flag on the button if it can occur multiple times. Chris@0: if (!empty($button['multiple'])) { Chris@0: $button_item['multiple'] = TRUE; Chris@0: } Chris@0: Chris@0: return $button_item; Chris@0: }; Chris@0: Chris@0: // Assemble list of disabled buttons (which are always a single row). Chris@0: $variables['active_buttons'] = []; Chris@0: foreach ($active_buttons as $row_number => $button_row) { Chris@0: foreach ($button_groups[$row_number] as $group_name) { Chris@0: $group_name = (string) $group_name; Chris@0: $variables['active_buttons'][$row_number][$group_name] = [ Chris@0: 'group_name_class' => Html::getClass($group_name), Chris@0: 'buttons' => [], Chris@0: ]; Chris@0: $buttons = array_filter($button_row, function ($button) use ($group_name) { Chris@0: return (string) $button['group'] === $group_name; Chris@0: }); Chris@0: foreach ($buttons as $button) { Chris@0: $variables['active_buttons'][$row_number][$group_name]['buttons'][] = $build_button_item($button, $rtl); Chris@0: } Chris@0: } Chris@0: } Chris@0: // Assemble list of disabled buttons (which are always a single row). Chris@0: $variables['disabled_buttons'] = []; Chris@0: foreach ($disabled_buttons as $button) { Chris@0: $variables['disabled_buttons'][] = $build_button_item($button, $rtl); Chris@0: } Chris@0: // Assemble list of multiple buttons that may be added multiple times. Chris@0: $variables['multiple_buttons'] = []; Chris@0: foreach ($multiple_buttons as $button) { Chris@0: $variables['multiple_buttons'][] = $build_button_item($button, $rtl); Chris@0: } Chris@0: }