Show: Inherited Protected Private Deprecated

# File `src/ui/react/src/components/base/button-keystroke.js`

                                (function() {
                                    'use strict';

                                    /**
                                     * ButtonKeystroke is a mixin that provides a `keystroke` prop that allows configuring
                                     * a function of the instance to be invoked upon the keystroke activation.
                                     *
                                     * @class ButtonKeystroke
                                     */
                                    var ButtonKeystroke = {
                                        // Allows validating props being passed to the component.
                                        propTypes: {
                                            /**
                                             * The keystroke definition. An object with the following properties:
                                             * - fn: The function to be executed
                                             * - keys: The keystroke definition, as expected by http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setKeystroke
                                             * - name: The name for the CKEditor command that will be created. If empty,
                                             * a random name will be created on the fly
                                             * @property {Object} keystroke
                                             */
                                            keystroke: React.PropTypes.object.isRequired
                                        },

                                        /**
                                         * Lifecycle. Invoked once, both on the client and server, immediately before the initial rendering occurs.
                                         *
                                         * @method componentWillMount
                                         */
                                        componentWillMount: function() {
                                            var nativeEditor = this.props.editor.get('nativeEditor');
                                            var keystroke = this.props.keystroke;

                                            var commandName = keystroke.name || ((Math.random() * 1e9) >>> 0).toString();

                                            var command = nativeEditor.getCommand(commandName);

                                            if (!command) {
                                                command = new CKEDITOR.command(nativeEditor, {
                                                    exec: function(editor) {
                                                            var keystrokeFn = keystroke.fn;

                                                            if (AlloyEditor.Lang.isString(keystrokeFn)) {
                                                                this[keystrokeFn].call(this, editor);
                                                            } else if (AlloyEditor.Lang.isFunction(keystrokeFn)) {
                                                                keystrokeFn.call(this, editor);
                                                            }
                                                        }.bind(this)
                                                    }
                                                );

                                                nativeEditor.addCommand(commandName, command);
                                            }

                                            this._defaultKeystrokeCommand = nativeEditor.keystrokeHandler.keystrokes[keystroke.keys];

                                            nativeEditor.setKeystroke(keystroke.keys, commandName);
                                        },

                                        /**
                                         * Lifecycle. Invoked immediately before a component is unmounted from the DOM.
                                         *
                                         * @method componentWillUnmount
                                         */
                                        componentWillUnmount: function() {
                                            this.props.editor.get('nativeEditor').setKeystroke(this.props.keystroke.keys, this._defaultKeystrokeCommand);
                                        }
                                    };

                                    AlloyEditor.ButtonKeystroke = ButtonKeystroke;
                                }());