API Docs for: 1.0.0
Show:

File: Resources/public/js/alloyeditor/buttons/mixins/embeddiscovercontent.js

/*
 * Copyright (C) eZ Systems AS. All rights reserved.
 * For full copyright and license information view LICENSE file distributed with this source code.
 */
YUI.add('ez-alloyeditor-button-mixin-embeddiscovercontent', function (Y) {
    "use strict";

    /**
     * Provides the EmbedDiscoverContent mixin
     *
     * @module ez-alloyeditor-button-mixin-embeddiscovercontent
     */
    Y.namespace('eZ.AlloyEditorButton');

    var React = Y.eZ.React;

    /**
     * ButtonEmbedDiscoverContent is a mixing providing the necessary code to
     * trigger UDW and use the content choosen by the user to correctly set the
     * properties of the ezembed widget.
     *
     * @class ButtonEmbedDiscoverContent
     * @namespace eZ.AlloyEditorButton
     */
    Y.eZ.AlloyEditorButton.ButtonEmbedDiscoverContent = {
        propTypes: {
            /**
             * The editor instance where the component is being used.
             *
             * @property {Object} editor
             */
            editor: React.PropTypes.object.isRequired,

            /**
             * The title of the UDW. This property is deprecated, please
             * implement a _getUDWTitle method instead.
             *
             * @property {String} udwTitle
             * @deprecated
             */
            udwTitle: React.PropTypes.string,

            /**
             * The method to use as the contentDiscoveredHandler in the UDW
             *
             * @property {String} udwContentDiscoveredMethod
             */
            udwContentDiscoveredMethod: React.PropTypes.string,

            /**
             * The method to use as the isSelectable function in the UDW
             *
             * @property {String} udwIsSelectableMethod
             */
            udwIsSelectableMethod: React.PropTypes.string,

            /**
             * The loadContent flag to pass to the UDW
             *
             * @property {Boolean} udwLoadContent
             */
            udwLoadContent: React.PropTypes.bool,

            /**
             * The label of the button
             *
             * @property {String} label
             * @deprecated
             */
            label: React.PropTypes.string,
        },

        /**
         * Triggers the UDW to choose the content to embed.
         *
         * @method _chooseContent
         * @protected
         */
        _chooseContent: function () {
            var selectable = this.props.udwIsSelectableMethod,
                title;

            if ( !this._getUDWTitle ) {
                console.log('[DEPRECATED] using deprecated `udwTitle` property');
                console.log('[DEPRECATED] when using ButtonEmbedDiscoverContent please implement _getUDWTitle instead');
                title = this.props.udwTitle;
            } else {
                title = this._getUDWTitle();
            }


            this.props.editor.get('nativeEditor').fire('contentDiscover', {
                config: {
                    title: title,
                    multiple: false,
                    contentDiscoveredHandler: this[this.props.udwContentDiscoveredMethod],
                    isSelectable: selectable ? this[selectable] : undefined,
                    loadContent: this.props.udwLoadContent,
                }
            });
        },

        /**
         * Sets the href of the ezembed widget based on the given content info
         *
         * @method _setContentInfo
         * @protected
         * @param {eZ.ContentInfo} contentInfo
         */
        _setContentInfo: function (contentInfo) {
            var embedWidget = this._getWidget();

            embedWidget.setHref('ezcontent://' + contentInfo.get('contentId'));
            embedWidget.focus();
        },

        /**
         * Fires the `updatedEmbed` event. This should be called right after the
         * embed element is updated.
         *
         * @method _fireUpdatedEmbed
         * @protected
         * @param {Object} selection the UDW selection
         */
        _fireUpdatedEmbed: function (selection) {
            /**
             * Fired when the embed widget is updated in the editor. This event
             * can be listened to render the embed widget that has been updated.
             *
             * @event updatedEmbed
             * @param {Object} embedStruct the UDW selection
             */
            this.props.editor.get('nativeEditor').fire('updatedEmbed', {
                embedStruct: selection,
            });
        },
    };
});