direction ? '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_buttons) { foreach ($plugin_buttons as $button_name => $button) { $button['name'] = $button_name; if (!empty($button['multiple'])) { $variables['multiple_buttons'][$button_name] = $button; } $buttons[$button_name] = $button; } } $button_groups = array(); $variables['active_buttons'] = array(); foreach ($editor->settings['toolbar']['rows'] as $row_number => $row) { $button_groups[$row_number] = array(); foreach ($row as $group) { foreach ($group['items'] as $button_name) { if (isset($buttons[$button_name])) { // Save a reference to the button's configured toolbar group. $buttons[$button_name]['group'] = $group['name']; $variables['active_buttons'][$row_number][] = $buttons[$button_name]; if (empty($buttons[$button_name]['multiple'])) { unset($buttons[$button_name]); } // Create a list of all the toolbar button groups. if (!in_array($group['name'], $button_groups[$row_number])) { array_push($button_groups[$row_number], $group['name']); } } } } } $variables['disabled_buttons'] = array_diff_key($buttons, $variables['multiple_buttons']); $variables['button_groups'] = $button_groups; } /** * Displays the toolbar configuration for CKEditor. */ function theme_ckeditor_settings_toolbar($variables) { $rtl = $variables['language_direction'] === 'rtl' ? '_rtl' : ''; $build_button_item = function($button, $rtl) { // Value of the button item. if (isset($button['image_alternative'. $rtl])) { $value = $button['image_alternative' . $rtl]; } elseif (isset($button['image_alternative'])) { $value = $button['image_alternative']; } elseif (isset($button['image'])) { $image = array( '#theme' => 'image', '#uri' => $button['image' . $rtl], '#title' => $button['label'], ); $value = '' . drupal_render($image) . ''; } else { $value = '?'; } // Set additional attribute on the button if it can occur multiple times. if (!empty($button['multiple'])) { $button['attributes']['class'][] = 'ckeditor-multiple-button'; } // Build the button item. $button_item = array( 'value' => $value, 'data-drupal-ckeditor-button-name' => $button['name'], 'class' => array('ckeditor-button'), ); // If this button has group information, add it to the attributes. if (!empty($button['group'])) { $button_item['group'] = $button['group']; } if (!empty($button['attributes'])) { $button_item = array_merge($button_item, $button['attributes']); } return $button_item; }; // Assemble items to be added to active button rows. $active_buttons = array(); foreach ($variables['active_buttons'] as $row_number => $row_buttons) { foreach ($row_buttons as $button) { $active_buttons[$row_number][] = $build_button_item($button, $rtl); } } // Assemble list of disabled buttons (which are always a single row). $disabled_buttons = array(); foreach ($variables['disabled_buttons'] as $button) { $disabled_buttons[] = $build_button_item($button, $rtl); } // Assemble list of multiple buttons that may be added multiple times. $multiple_buttons = array(); foreach ($variables['multiple_buttons'] as $button) { $multiple_buttons[] = $build_button_item($button, $rtl); } $print_buttons = function($buttons) { $output = ''; foreach ($buttons as $button) { unset($button['group']); $value = $button['value']; unset($button['value']); $attributes = (string) new Attribute($button); $output .= '' . $value . ''; } return $output; }; $print_button_group = function($buttons, $group_name, $print_buttons) { $group = drupal_html_class($group_name); $output = ''; $output .= "
  • "; $output .= "

    {$group_name}

    "; $output .= "
  • "; return $output; }; // 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 .= '
    '; $output .= '' . t('Toolbar configuration') . ''; $output .= '
    '; $output .= '
    ' . t('Move a button into the Active toolbar to enable it, or into the list of Available buttons to disable it. Buttons may be moved with the mouse or keyboard arrow keys. Toolbar group names are provided to support screen reader users. Empty toolbar groups will be removed upon save.') . '
    '; $output .= '
    '; // Available buttons. $output .= '
    '; $output .= ''; $output .= '
      '; $output .= $print_buttons($disabled_buttons); $output .= '
    '; $output .= '
    '; // Dividers. $output .= '
    '; $output .= ''; $output .= '
      '; $output .= $print_buttons($multiple_buttons); $output .= '
    '; $output .= '
    '; $output .= '
    '; // Active toolbar. $output .= '
    '; $output .= '
    '; $output .= '
    '; $output .= '
    '; $output .= '
    '; return $output; }