Show: Inherited Protected Private Deprecated

# File `src/ui/react/src/components/base/toolbar-buttons.js`

                                (function() {
                                    'use strict';

                                    /**
                                     * ToolbarButtons is a mixin which provides a list of buttons which have to be
                                     * displayed on the current toolbar depending on user preferences and given state.
                                     *
                                     * @class ToolbarButtons
                                     */
                                    var ToolbarButtons = {
                                        /**
                                         * Analyzes the current selection and the buttons exclusive mode value to figure out which
                                         * buttons should be present in a given state.
                                         *
                                         * @method getToolbarButtons
                                         * @param {Array} buttons The buttons could be shown, prior to the state filtering.
                                         * @param {Object} additionalProps Additional props that should be passed down to the buttons.
                                         * @return {Array} An Array which contains the buttons that should be rendered.
                                         */
                                        getToolbarButtons: function(buttons, additionalProps) {
                                            var buttonProps = {};

                                            var nativeEditor = this.props.editor.get('nativeEditor');
                                            var buttonCfg = nativeEditor.config.buttonCfg || {};

                                            if (AlloyEditor.Lang.isFunction(buttons)) {
                                                buttons = buttons.call(this) || [];
                                            }

                                            var toolbarButtons = this.filterExclusive(
                                                    buttons.filter(function(button) {
                                                        return button && (AlloyEditor.Buttons[button] || AlloyEditor.Buttons[button.name]);
                                                    })
                                                    .map(function(button) {
                                                        if (AlloyEditor.Lang.isString(button)) {
                                                            buttonProps[button]= buttonCfg[button];
                                                            button = AlloyEditor.Buttons[button];
                                                        } else if (AlloyEditor.Lang.isString(button.name)) {
                                                            buttonProps[AlloyEditor.Buttons[button.name].key] = CKEDITOR.tools.merge(buttonCfg[button], button.cfg);
                                                            button = AlloyEditor.Buttons[button.name];
                                                        }

                                                        return button;
                                                    })
                                                )
                                                .map(function(button) {
                                                    var props = this.mergeExclusiveProps({
                                                        editor: this.props.editor,
                                                        key: button.key,
                                                        tabKey: button.key,
                                                        tabIndex: (this.props.trigger && this.props.trigger.props.tabKey === button.key) ? 0 : -1,
                                                        trigger: this.props.trigger
                                                    }, button.key);

                                                    props = this.mergeDropdownProps(props, button.key);

                                                    if (additionalProps) {
                                                        props = CKEDITOR.tools.merge(props, additionalProps);
                                                    }

                                                    props = CKEDITOR.tools.merge(props, buttonProps[button.key]);

                                                    return React.createElement(button, props);
                                                }, this);

                                            return toolbarButtons;
                                        }
                                    };

                                    AlloyEditor.ToolbarButtons = ToolbarButtons;
                                }());