File "editor.js"

Full Path: /home/leadltht/fastlinkinternet.com/admin/wp-content/plugins/bdevs-element/assets/admin/js/editor.js
File size: 10.29 KB
MIME-type: text/plain
Charset: utf-8

;(function($) {
    'use strict';

    elementor.on('panel:init', function() {

        $('#elementor-panel-elements-search-input').on('keyup', _.debounce(function() {
            $('#elementor-panel-elements')
                .find('.hm')
                .parents('.elementor-element')
                .addClass('is-bdevselement-widget');
        }, 100));
        //Bdevs Element Grid Layer Shortcut Register
	    if ( typeof $e !== 'undefined' || $e !== null ) {

		    var option = {
			    callback: function() {
				    var bdevs_element_grid = elementor.settings.page.model.attributes.bdevs_element_grid;
				    if ( '' === bdevs_element_grid ) {
					    elementor.settings.page.model.setExternalChange( 'bdevs_element_grid', 'yes' );
				    } else if ( 'yes' === bdevs_element_grid ) {
					    elementor.settings.page.model.setExternalChange( 'bdevs_element_grid', '' );
				    }
			    }
		    };

		    $e.shortcuts.register( 'ctrl+shift+g', option);
		    $e.shortcuts.register( 'cmd+shift+g', option);
	    }
    });

    function getCssEffectsControlsMap() {

        return {
            'translate' : ['x', 'y', 'x_tablet', 'y_tablet', 'x_mobile', 'y_mobile'],
            'skew' : ['x', 'y', 'x_tablet', 'y_tablet', 'x_mobile', 'y_mobile'],
            'scale': ['x', 'y', 'x_tablet', 'y_tablet', 'x_mobile', 'y_mobile'],
            'rotate' : ['x', 'y', 'z', 'x_tablet', 'y_tablet', 'z_tablet', 'x_mobile', 'y_mobile', 'z_mobile']
        };
    }

    function bindCssTransformControls(effectSwitch, effectControl, widgetModel) {

        var settingPrefix = 'bdevs_element_transform_fx_';
        effectSwitch = settingPrefix + effectSwitch;
        effectControl = settingPrefix + effectControl;

        widgetModel.on('change:'+ effectSwitch, function(model, isActive) {
            if (!isActive) {
                var controlView = elementor.getPanelView().getCurrentPageView().children.find(function(view) {
                    return view.model.get('name') === effectControl;
                });
                widgetModel.set(effectControl, _.extend({}, widgetModel.defaults[effectControl]));
                controlView && controlView.render();
            }
        });
    }

    function initCssTransformEffects(model) {

        var widgetModel = elementorFrontend.config.elements.data[model.cid];
        _.each(getCssEffectsControlsMap(), function(effectProps, effectKey) {
            _.each(effectProps, function(effectProp) {
                bindCssTransformControls(
                    effectKey + '_toggle',
                    effectKey + '_' + effectProp,
                    widgetModel
                );
            })
        });

        // Event bindings cleanup
        elementor.getPanelView().getCurrentPageView().model.on('editor:close', function() {
            _.each(getCssEffectsControlsMap(), function(effectConfig, effectKey) {
                widgetModel.off('change:bdevs_element_transform_fx_'+effectKey+'_toggle');
            });
        });
    }

    elementor.hooks.addAction('panel/open_editor/widget', function(panel, model) {
        initCssTransformEffects(model);
    });

    if ( elementor.modules.controls.Icons ) {

        var WithBdevsElementIcons = elementor.modules.controls.Icons.extend({

            getControlValue: function() {
                
                var controlValue = this.constructor.__super__.getControlValue.call(this),
                    model = this.model,
                    valueToMigrate = this.getValueToMigrate(),
                    newValue = { value: '', library: 'bdevs-icons' },
                    elementSettingsModel = ( this.container && this.container.settings ) || this.elementSettingsModel;

                if ( _.isObject( controlValue ) &&
                    !_.isEmpty( controlValue ) &&
                    controlValue.library !== 'svg' &&
                    controlValue.value.indexOf( 'fashm' ) === 0
                ) {
                    newValue.value = controlValue.value.substr( controlValue.value.indexOf( 'fa fa-' ) );
                    elementSettingsModel.set( model.get( 'name' ), newValue );
                    return newValue;
                }

                if ( ! _.isObject( controlValue ) && valueToMigrate && valueToMigrate.indexOf( 'fa fa-' ) === 0 ) {
                    newValue.value = valueToMigrate;
                    elementSettingsModel.set( model.get( 'name' ), newValue );
                    return newValue;
                }

                if ( ! this.isMigrationAllowed() ) {
                    return valueToMigrate;
                }

                // Bail if no migration flag or no value to migrate
                if ( ! valueToMigrate ) {
                    return controlValue;
                }

                var didMigration = elementSettingsModel.get( this.dataKeys.migratedKey ),
                    controlName = model.get( 'name' );

                // Check if migration had been done and is stored locally
                if ( this.cache.migratedFlag[ controlName ] ) {
                    return this.cache.migratedFlag[ controlName ];
                }
                // Check if already migrated
                if ( didMigration && didMigration[ controlName ] ) {
                    return controlValue;
                }

                // Do migration
                return this.migrateFa4toFa5( valueToMigrate );
            }
        });

        elementor.addControlView( 'icons', WithBdevsElementIcons );
    }

    window.bdevs_element_has_icon_library = function() {

        return ( elementor.helpers && elementor.helpers.renderIcon );
    };

    window.bdevs_element_get_feature_label = function( text ) {

        var div = document.createElement('DIV');

        div.innerHTML = text;
        text = div.textContent || div.innerText || text;

        return text.length > 20 ? text.substring(0, 20) + "..." : text;
    };

    function bdevs_element_translate(stringKey, templateArgs) {

        return elementorCommon.translate(stringKey, null, templateArgs, BdevsElementEditor.i18n);
    }

    elementor.modules.layouts.panel.pages.menu.Menu.addItem({

        name: 'bdevselement-home',
        icon: 'fa fa-BdevsElement',
        title: bdevs_element_translate( 'editorPanelHomeLinkTitle' ),
        type: 'link',
        link: BdevsElementEditor.editorPanelHomeLinkURL,
        newTab: true
    }, 'settings');

    elementor.modules.layouts.panel.pages.menu.Menu.addItem({

        name: 'bdevselement-widgets',
        icon: 'fa fa-cross-game',
        title: bdevs_element_translate( 'editorPanelWidgetsLinkTitle' ),
        type: 'link',
        link: BdevsElementEditor.editorPanelWidgetsLinkURL,
        newTab: true
    }, 'settings');
    
    /**
     * Add pro widgets placeholder
     */
    elementor.hooks.addFilter( 'panel/elements/regionViews', function( regionViews ) {
        
        if ( BdevsElementEditor.hasPro || _.isEmpty( BdevsElementEditor.proWidgets ) ) {
            return regionViews;
        }

        var CATEGOERY_NAME = 'bdevs_element_pro',
            elementsView = regionViews.elements.view,
            categoriesView = regionViews.categories.view,
            elementsCollection = regionViews.elements.options.collection,
            categoriesCollection = regionViews.categories.options.collection,
            proWidgets = [],
            ElementView,
            freeCategoryIndex;

        _.each( BdevsElementEditor.proWidgets, function( widget, name ) {
            elementsCollection.add({
                name: 'bdevselement-' + name,
                title: widget.title,
                icon: widget.icon,
                categories: [ CATEGOERY_NAME ],
                editable: false,
            });
        });

		elementsCollection.each( function( element ) {
            if ( element.get( 'categories' )[0] === CATEGOERY_NAME ) {
                proWidgets.push( element );
            }
        } );

        freeCategoryIndex = categoriesCollection.findIndex({ name:'bdevs_element_category' });

        if ( freeCategoryIndex ) {
            categoriesCollection.add( {
                name: 'bdevs_element_pro_category',
                title: 'Bdevs Element',
                icon: 'fa fa-plug',
                defaultActive: false,
                items: proWidgets,
            }, {
                at: freeCategoryIndex + 1 
            });
        }

        ElementView = {
            className: function() {
                var className = this.constructor.__super__.className.call(this);
                if ( ! this.isEditable() && this.isBdevsElementWidget() ) {
                    className += ' bdevselement-element--promotion';
                }

                return className;
            },

            isBdevsElementWidget: function() {
                return this.model.get('name').indexOf('bdevselement-') === 0;
            },

            onMouseDown: function() {
                if ( ! this.isBdevsElementWidget() ) {
                    elementor.promotion.dialog.buttons[0].removeClass('bdevselement-btn--promotion');
                    this.constructor.__super__.onMouseDown.call(this);
                    return;
                }

                elementor.promotion.dialog.buttons[0].addClass('bdevselement-btn--promotion');

                elementor.promotion.showDialog( {
                    headerMessage: bdevs_element_translate( 'promotionDialogHeader', [ this.model.get( 'title' ) ] ),
                    message: bdevs_element_translate( 'promotionDialogMessage', [ this.model.get( 'title' ) ] ),
                    top: '-7',
                    element: this.el,
                    actionURL: 'http://elementor.bdevs.net/',
                } );
            }
        };

        regionViews.elements.view = elementsView.extend({
            childView: elementsView.prototype.childView.extend(ElementView)
        });

        regionViews.categories.view = categoriesView.extend({
            childView: categoriesView.prototype.childView.extend({
                childView: categoriesView.prototype.childView.prototype.childView.extend(ElementView)
            })
        });

        return regionViews;
    });

}(jQuery));