Plugin Directory

Changeset 2316661


Ignore:
Timestamp:
06/02/2020 02:32:35 PM (6 years ago)
Author:
gpriday
Message:

2.11.0 release

Location:
siteorigin-panels
Files:
8 added
8 deleted
12 edited
27 copied

Legend:

Unmodified
Added
Removed
  • siteorigin-panels/tags/2.11.0/compat/js/siteorigin-panels-layout-block.js

    r2278148 r2316661  
    266266    panelsData: {
    267267      type: 'object'
     268    },
     269    contentPreview: {
     270      type: 'string'
    268271    }
    269272  },
     
    276279      if (!_.isEmpty(newPanelsData.widgets)) {
    277280        // Send panelsData to server for sanitization.
    278         jQuery.post(soPanelsBlockEditorAdmin.sanitizeUrl, {
    279           action: 'so_panels_layout_block_sanitize',
    280           panelsData: JSON.stringify(newPanelsData)
    281         }, function (sanitizedPanelsData) {
    282           if (sanitizedPanelsData !== '') {
    283             setAttributes({
    284               panelsData: sanitizedPanelsData
    285             });
    286           }
     281        jQuery.post(panelsOptions.ajaxurl, {
     282          action: 'so_panels_builder_content_json',
     283          panels_data: JSON.stringify(newPanelsData),
     284          post_id: wp.data.select("core/editor").getCurrentPostId()
     285        }, function (content) {
     286          var panelsAttributes = {};
     287
     288          if (content.sanitized_panels_data !== '') {
     289            panelsAttributes.panelsData = content.sanitized_panels_data;
     290          }
     291
     292          if (content.preview !== '') {
     293            panelsAttributes.contentPreview = content.preview;
     294          }
     295
     296          setAttributes(panelsAttributes);
    287297        });
    288298      }
     
    304314    });
    305315  },
    306   save: function save() {
    307     // Render in PHP
    308     return null;
     316  save: function save(_ref2) {
     317    var attributes = _ref2.attributes;
     318    return attributes.hasOwnProperty('contentPreview') ? React.createElement(RawHTML, null, attributes.contentPreview) : null;
    309319  }
    310320});
  • siteorigin-panels/tags/2.11.0/compat/js/siteorigin-panels-layout-block.min.js

    r2278148 r2316661  
    1 "use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}function _possibleConstructorReturn(e,t){return!t||"object"!==_typeof(t)&&"function"!=typeof t?_assertThisInitialized(e):t}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _getPrototypeOf(e){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_setPrototypeOf(e,t)}function _setPrototypeOf(e,t){return(_setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var _lodash=lodash,isEqual=_lodash.isEqual,debounce=_lodash.debounce,isEmpty=_lodash.isEmpty,isFunction=_lodash.isFunction,registerBlockType=wp.blocks.registerBlockType,_wp$element=wp.element,Component=_wp$element.Component,Fragment=_wp$element.Fragment,RawHTML=_wp$element.RawHTML,createRef=_wp$element.createRef,BlockControls=wp.editor.BlockControls,_wp$components=wp.components,Toolbar=_wp$components.Toolbar,IconButton=_wp$components.IconButton,Spinner=_wp$components.Spinner,__=wp.i18n.__,_window=window,soPanelsBlockEditorAdmin=_window.soPanelsBlockEditorAdmin,SiteOriginPanelsLayoutBlock=function(e){function t(e){var n;_classCallCheck(this,t),n=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this,e));var i="edit"===soPanelsBlockEditorAdmin.defaultMode||isEmpty(e.panelsData);return n.state={editing:i,loadingPreview:!i,previewHtml:""},n.panelsContainer=createRef(),n.previewContainer=createRef(),n.panelsInitialized=!1,n.previewInitialized=!1,n}return _inherits(t,Component),_createClass(t,[{key:"componentDidMount",value:function(){this.isStillMounted=!0,this.state.editing?this.setupPanels():this.state.editing||this.previewInitialized||(this.fetchPreview(this.props),this.fetchPreview=debounce(this.fetchPreview,500))}},{key:"componentWillUnmount",value:function(){this.isStillMounted=!1,this.builderView&&this.builderView.off("content_change")}},{key:"componentDidUpdate",value:function(e){this.state.editing&&!this.panelsInitialized?this.setupPanels():this.state.loadingPreview?this.fetchPreview(this.props):!this.previewInitialized&&this.previewContainer.current&&(jQuery(document).trigger("panels_setup_preview"),this.previewInitialized=!0)}},{key:"setupPanels",value:function(){var e=this,t=jQuery(this.panelsContainer.current),n=new panels.model.builder;this.builderView=new panels.view.builder({model:n,config:{editorType:"standalone"}});var i=JSON.parse(JSON.stringify(jQuery.extend({},this.props.panelsData))),o=function(){isFunction(e.props.onRowOrWidgetMouseDown)&&e.props.onRowOrWidgetMouseDown();jQuery(document).on("mouseup",(function t(){jQuery(document).off("mouseup",t),isFunction(e.props.onRowOrWidgetMouseUp)&&e.props.onRowOrWidgetMouseUp()}))};this.builderView.on("row_added",(function(){e.builderView.$(".so-row-move").off("mousedown",o),e.builderView.$(".so-row-move").on("mousedown",o),e.builderView.$(".so-widget").off("mousedown",o),e.builderView.$(".so-widget").on("mousedown",o)})),this.builderView.on("widget_added",(function(){e.builderView.$(".so-widget").off("mousedown",o),e.builderView.$(".so-widget").on("mousedown",o)})),this.builderView.render().attach({container:t}).setData(i),this.builderView.trigger("builder_resize"),this.builderView.on("content_change",(function(){var t=e.builderView.getData();e.panelsDataChanged=!isEqual(i,t),e.panelsDataChanged&&(e.props.onContentChange&&isFunction(e.props.onContentChange)&&e.props.onContentChange(t),e.setState({loadingPreview:!0,previewHtml:""}))})),jQuery(document).trigger("panels_setup",this.builderView),this.panelsInitialized=!0}},{key:"fetchPreview",value:function(e){var t=this;if(this.isStillMounted){this.previewInitialized=!1;var n=this.currentFetchRequest=jQuery.post({url:soPanelsBlockEditorAdmin.previewUrl,data:{action:"so_panels_layout_block_preview",panelsData:JSON.stringify(e.panelsData)}}).then((function(e){t.isStillMounted&&n===t.currentFetchRequest&&e&&t.setState({previewHtml:e,loadingPreview:!1})}));return n}}},{key:"render",value:function(){var e=this,t=this.props.panelsData;if(this.state.editing)return React.createElement(Fragment,null,React.createElement(BlockControls,null,React.createElement(Toolbar,null,React.createElement(IconButton,{icon:"visibility",className:"components-icon-button components-toolbar__control",label:__("Preview layout.","siteorigin-panels"),onClick:function(){t&&e.setState({editing:!1})}}))),React.createElement("div",{key:"layout-block",className:"siteorigin-panels-layout-block-container",ref:this.panelsContainer}));var n=this.state.loadingPreview;return React.createElement(Fragment,null,React.createElement(BlockControls,null,React.createElement(Toolbar,null,React.createElement(IconButton,{icon:"edit",className:"components-icon-button components-toolbar__control",label:__("Edit layout.","siteorigin-panels"),onClick:function(){e.panelsInitialized=!1,e.setState({editing:!0})}}))),React.createElement("div",{key:"preview",className:"so-panels-block-layout-preview-container"},n?React.createElement("div",{className:"so-panels-spinner-container"},React.createElement("span",null,React.createElement(Spinner,null))):React.createElement("div",{className:"so-panels-raw-html-container",ref:this.previewContainer},React.createElement(RawHTML,null,this.state.previewHtml))))}}]),t}();registerBlockType("siteorigin-panels/layout-block",{title:__("SiteOrigin Layout","siteorigin-panels"),description:__("Build a layout using SiteOrigin's Page Builder.","siteorigin-panels"),icon:function(){return React.createElement("span",{className:"siteorigin-panels-block-icon"})},category:"layout",keywords:["page builder","column,grid","panel"],supports:{html:!1},attributes:{panelsData:{type:"object"}},edit:function(e){var t=e.attributes,n=e.setAttributes,i=e.toggleSelection;return React.createElement(SiteOriginPanelsLayoutBlock,{panelsData:t.panelsData,onContentChange:function(e){_.isEmpty(e.widgets)||jQuery.post(soPanelsBlockEditorAdmin.sanitizeUrl,{action:"so_panels_layout_block_sanitize",panelsData:JSON.stringify(e)},(function(e){""!==e&&n({panelsData:e})}))},onRowOrWidgetMouseDown:function(){i(!1)},onRowOrWidgetMouseUp:function(){i(!0)}})},save:function(){return null}}),function(e){soPanelsBlockEditorAdmin.showAddButton&&e((function(){setTimeout((function(){var t=wp.data.dispatch("core/editor"),n=wp.data.select("core/editor"),i=e("#siteorigin-panels-add-layout-block-button").html(),o=e(i).insertAfter(".editor-writing-flow > div:first, .block-editor-writing-flow > div:not([tabindex])");o.on("click",(function(){var e=wp.blocks.createBlock("siteorigin-panels/layout-block",{});if(n.isEditedPostEmpty()){var i=n.getBlocks();i.length?t.replaceBlock(i[0].clientId,e):t.insertBlock(e)}else t.insertBlock(e)}));var r=function(){wp.data.select("core/editor").isEditedPostEmpty()?o.show():o.hide()};wp.data.subscribe(r),r()}),100)}))}(jQuery);
     1"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}function _possibleConstructorReturn(e,t){return!t||"object"!==_typeof(t)&&"function"!=typeof t?_assertThisInitialized(e):t}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _getPrototypeOf(e){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_setPrototypeOf(e,t)}function _setPrototypeOf(e,t){return(_setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var _lodash=lodash,isEqual=_lodash.isEqual,debounce=_lodash.debounce,isEmpty=_lodash.isEmpty,isFunction=_lodash.isFunction,registerBlockType=wp.blocks.registerBlockType,_wp$element=wp.element,Component=_wp$element.Component,Fragment=_wp$element.Fragment,RawHTML=_wp$element.RawHTML,createRef=_wp$element.createRef,BlockControls=wp.editor.BlockControls,_wp$components=wp.components,Toolbar=_wp$components.Toolbar,IconButton=_wp$components.IconButton,Spinner=_wp$components.Spinner,__=wp.i18n.__,_window=window,soPanelsBlockEditorAdmin=_window.soPanelsBlockEditorAdmin,SiteOriginPanelsLayoutBlock=function(e){function t(e){var n;_classCallCheck(this,t),n=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this,e));var i="edit"===soPanelsBlockEditorAdmin.defaultMode||isEmpty(e.panelsData);return n.state={editing:i,loadingPreview:!i,previewHtml:""},n.panelsContainer=createRef(),n.previewContainer=createRef(),n.panelsInitialized=!1,n.previewInitialized=!1,n}return _inherits(t,Component),_createClass(t,[{key:"componentDidMount",value:function(){this.isStillMounted=!0,this.state.editing?this.setupPanels():this.state.editing||this.previewInitialized||(this.fetchPreview(this.props),this.fetchPreview=debounce(this.fetchPreview,500))}},{key:"componentWillUnmount",value:function(){this.isStillMounted=!1,this.builderView&&this.builderView.off("content_change")}},{key:"componentDidUpdate",value:function(e){this.state.editing&&!this.panelsInitialized?this.setupPanels():this.state.loadingPreview?this.fetchPreview(this.props):!this.previewInitialized&&this.previewContainer.current&&(jQuery(document).trigger("panels_setup_preview"),this.previewInitialized=!0)}},{key:"setupPanels",value:function(){var e=this,t=jQuery(this.panelsContainer.current),n=new panels.model.builder;this.builderView=new panels.view.builder({model:n,config:{editorType:"standalone"}});var i=JSON.parse(JSON.stringify(jQuery.extend({},this.props.panelsData))),o=function(){isFunction(e.props.onRowOrWidgetMouseDown)&&e.props.onRowOrWidgetMouseDown();jQuery(document).on("mouseup",(function t(){jQuery(document).off("mouseup",t),isFunction(e.props.onRowOrWidgetMouseUp)&&e.props.onRowOrWidgetMouseUp()}))};this.builderView.on("row_added",(function(){e.builderView.$(".so-row-move").off("mousedown",o),e.builderView.$(".so-row-move").on("mousedown",o),e.builderView.$(".so-widget").off("mousedown",o),e.builderView.$(".so-widget").on("mousedown",o)})),this.builderView.on("widget_added",(function(){e.builderView.$(".so-widget").off("mousedown",o),e.builderView.$(".so-widget").on("mousedown",o)})),this.builderView.render().attach({container:t}).setData(i),this.builderView.trigger("builder_resize"),this.builderView.on("content_change",(function(){var t=e.builderView.getData();e.panelsDataChanged=!isEqual(i,t),e.panelsDataChanged&&(e.props.onContentChange&&isFunction(e.props.onContentChange)&&e.props.onContentChange(t),e.setState({loadingPreview:!0,previewHtml:""}))})),jQuery(document).trigger("panels_setup",this.builderView),this.panelsInitialized=!0}},{key:"fetchPreview",value:function(e){var t=this;if(this.isStillMounted){this.previewInitialized=!1;var n=this.currentFetchRequest=jQuery.post({url:soPanelsBlockEditorAdmin.previewUrl,data:{action:"so_panels_layout_block_preview",panelsData:JSON.stringify(e.panelsData)}}).then((function(e){t.isStillMounted&&n===t.currentFetchRequest&&e&&t.setState({previewHtml:e,loadingPreview:!1})}));return n}}},{key:"render",value:function(){var e=this,t=this.props.panelsData;if(this.state.editing)return React.createElement(Fragment,null,React.createElement(BlockControls,null,React.createElement(Toolbar,null,React.createElement(IconButton,{icon:"visibility",className:"components-icon-button components-toolbar__control",label:__("Preview layout.","siteorigin-panels"),onClick:function(){t&&e.setState({editing:!1})}}))),React.createElement("div",{key:"layout-block",className:"siteorigin-panels-layout-block-container",ref:this.panelsContainer}));var n=this.state.loadingPreview;return React.createElement(Fragment,null,React.createElement(BlockControls,null,React.createElement(Toolbar,null,React.createElement(IconButton,{icon:"edit",className:"components-icon-button components-toolbar__control",label:__("Edit layout.","siteorigin-panels"),onClick:function(){e.panelsInitialized=!1,e.setState({editing:!0})}}))),React.createElement("div",{key:"preview",className:"so-panels-block-layout-preview-container"},n?React.createElement("div",{className:"so-panels-spinner-container"},React.createElement("span",null,React.createElement(Spinner,null))):React.createElement("div",{className:"so-panels-raw-html-container",ref:this.previewContainer},React.createElement(RawHTML,null,this.state.previewHtml))))}}]),t}();registerBlockType("siteorigin-panels/layout-block",{title:__("SiteOrigin Layout","siteorigin-panels"),description:__("Build a layout using SiteOrigin's Page Builder.","siteorigin-panels"),icon:function(){return React.createElement("span",{className:"siteorigin-panels-block-icon"})},category:"layout",keywords:["page builder","column,grid","panel"],supports:{html:!1},attributes:{panelsData:{type:"object"},contentPreview:{type:"string"}},edit:function(e){var t=e.attributes,n=e.setAttributes,i=e.toggleSelection;return React.createElement(SiteOriginPanelsLayoutBlock,{panelsData:t.panelsData,onContentChange:function(e){_.isEmpty(e.widgets)||jQuery.post(panelsOptions.ajaxurl,{action:"so_panels_builder_content_json",panels_data:JSON.stringify(e),post_id:wp.data.select("core/editor").getCurrentPostId()},(function(e){var t={};""!==e.sanitized_panels_data&&(t.panelsData=e.sanitized_panels_data),""!==e.preview&&(t.contentPreview=e.preview),n(t)}))},onRowOrWidgetMouseDown:function(){i(!1)},onRowOrWidgetMouseUp:function(){i(!0)}})},save:function(e){var t=e.attributes;return t.hasOwnProperty("contentPreview")?React.createElement(RawHTML,null,t.contentPreview):null}}),function(e){soPanelsBlockEditorAdmin.showAddButton&&e((function(){setTimeout((function(){var t=wp.data.dispatch("core/editor"),n=wp.data.select("core/editor"),i=e("#siteorigin-panels-add-layout-block-button").html(),o=e(i).insertAfter(".editor-writing-flow > div:first, .block-editor-writing-flow > div:not([tabindex])");o.on("click",(function(){var e=wp.blocks.createBlock("siteorigin-panels/layout-block",{});if(n.isEditedPostEmpty()){var i=n.getBlocks();i.length?t.replaceBlock(i[0].clientId,e):t.insertBlock(e)}else t.insertBlock(e)}));var r=function(){wp.data.select("core/editor").isEditedPostEmpty()?o.show():o.hide()};wp.data.subscribe(r),r()}),100)}))}(jQuery);
  • siteorigin-panels/tags/2.11.0/inc/admin.php

    r2298584 r2316661  
    5353        // Register all the admin actions
    5454        add_action( 'wp_ajax_so_panels_builder_content', array( $this, 'action_builder_content' ) );
     55        add_action( 'wp_ajax_so_panels_builder_content_json', array( $this, 'action_builder_content_json' ) );
    5556        add_action( 'wp_ajax_so_panels_widget_form', array( $this, 'action_widget_form' ) );
    5657        add_action( 'wp_ajax_so_panels_live_editor_preview', array( $this, 'action_live_editor_preview' ) );
     
    6768
    6869        $this->in_save_post = false;
    69        
    70        
     70
     71
    7172        // Enqueue Yoast compatibility
    7273        add_action( 'admin_print_scripts-post-new.php', array( $this, 'enqueue_yoast_compat' ), 100 );
    7374        add_action( 'admin_print_scripts-post.php', array( $this, 'enqueue_yoast_compat' ), 100 );
    74        
     75
    7576        // Block editor specific actions
    7677        if ( function_exists( 'register_block_type' ) ) {
     
    141142            }
    142143        }
    143        
     144
    144145        return $is_gutenberg_page || $is_block_editor;
    145146    }
     
    157158            return $links;
    158159        }
    159        
     160
    160161        unset( $links['edit'] );
    161162        $links[] = '<a href="http://siteorigin.com/threads/plugin-page-builder/">' . __( 'Support Forum', 'siteorigin-panels' ) . '</a>';
     
    172173     */
    173174    function add_meta_boxes() {
    174        
     175
    175176        foreach ( siteorigin_panels_setting( 'post-types' ) as $type ) {
    176177            add_meta_box(
     
    231232            false
    232233        );
    233        
     234
    234235        if ( siteorigin_panels_setting( 'sidebars-emulator' ) ) {
    235236            $sidebars_emulator = SiteOrigin_Panels_Sidebars_Emulator::single();
    236237            $panels_data['widgets'] = $sidebars_emulator->generate_sidebar_widget_ids( $panels_data['widgets'], $post_id );
    237238        }
    238        
     239
    239240        $panels_data = SiteOrigin_Panels_Styles_Admin::single()->sanitize_all( $panels_data );
    240241        $panels_data = apply_filters( 'siteorigin_panels_data_pre_save', $panels_data, $post, $post_id );
     
    248249                $post_parent_id = wp_is_post_revision( $post_id );
    249250                $layout_id = ( ! empty( $post_parent_id ) ) ? $post_parent_id : $post_id;
    250                
     251
    251252                SiteOrigin_Panels_Post_Content_Filters::add_filters();
    252253                $GLOBALS[ 'SITEORIGIN_PANELS_POST_CONTENT_RENDER' ] = true;
     
    319320
    320321            $user = wp_get_current_user();
    321            
     322
    322323            $load_on_attach = siteorigin_panels_setting( 'load-on-attach' ) || isset( $_GET['siteorigin-page-builder'] );
    323324            wp_localize_script( 'so-panels-admin', 'panelsOptions', array(
     
    490491                )
    491492            ) );
    492            
     493
    493494            $js_widgets = array();
    494495            if ( $screen->base != 'widgets' ) {
     
    506507                    do_action_ref_array( 'in_widget_form', array( &$widget_obj, &$return, array() ) );
    507508                    ob_end_clean();
    508                    
     509
    509510                    // Need to render templates for new WP 4.8 widgets when not on the 'widgets' screen or in the customizer.
    510511                    if ( $this->is_core_js_widget( $widget_obj ) ) {
     
    684685            false
    685686        );
    686        
     687
    687688        if ( siteorigin_panels_setting( 'sidebars-emulator' ) ) {
    688689            $sidebars_emulator = SiteOrigin_Panels_Sidebars_Emulator::single();
    689690            $panels_data['widgets'] = $sidebars_emulator->generate_sidebar_widget_ids( $panels_data['widgets'], $page_id );
    690691        }
    691        
     692
    692693        $panels_data            = SiteOrigin_Panels_Styles_Admin::single()->sanitize_all( $panels_data );
    693694        $panels_data            = apply_filters( 'siteorigin_panels_data_pre_save', $panels_data, $page, $page_id );
     
    777778        // Other plugins can manipulate the list of widgets. Possibly to add recommended widgets
    778779        $widgets = apply_filters( 'siteorigin_panels_widgets', $widgets );
    779        
     780
    780781        // Exclude these temporarily, as they won't work until we have a reliable way to enqueue their admin form scripts.
    781782        $to_exclude = array(
     
    785786            'Jetpack_Twitter_Timeline_Widget'
    786787        );
    787        
     788
    788789        foreach ( $to_exclude as $widget_class ) {
    789790            if ( in_array( $widget_class, $widgets ) ) {
     
    878879
    879880                    $widget = $instance;
    880                    
     881
    881882                    unset( $info['raw'] );
    882883                }
     
    887888                $info[ 'class' ] = preg_replace( '/\\\\+/', '\\\\\\\\', $info['class'] );
    888889            }
    889            
     890
    890891            $widget['panels_info'] = $info;
    891892        }
     
    912913     */
    913914    function render_form( $widget_class, $instance = array(), $raw = false, $widget_number = '{$id}' ) {
    914        
     915
    915916        $the_widget = SiteOrigin_Panels::get_widget_instance( $widget_class );
    916917        // This is a chance for plugins to replace missing widgets
    917918        $the_widget = apply_filters( 'siteorigin_panels_widget_object', $the_widget, $widget_class );
    918        
     919
    919920        if ( empty( $the_widget ) || ! is_a( $the_widget, 'WP_Widget' ) ) {
    920921            $widgets = $this->get_widgets();
     
    10001001        return $form;
    10011002    }
    1002    
     1003
    10031004    /**
    10041005     * Checks whether a widget is considered to be a JS widget. I.e. it needs to have scripts and/or styles enqueued for
     
    10201021            'WP_Widget_Text',
    10211022        );
    1022        
     1023
    10231024        $is_js_widget = in_array( get_class( $widget ), $js_widgets ) &&
    10241025                        // Need to check this for `WP_Widget_Text` which was not a JS widget before 4.8
    10251026                        method_exists( $widget, 'render_control_template_scripts' );
    1026        
     1027
    10271028        return $is_js_widget;
    10281029    }
     
    10721073
    10731074    /**
     1075     * Get builder content based on the submitted panels_data.
     1076     */
     1077    function action_builder_content_json() {
     1078        header( 'content-type: application/json' );
     1079        $return = array('post_content' => '', 'preview' => '', 'sanitized_panels_data' => '');
     1080
     1081        if ( ! wp_verify_nonce( $_GET['_panelsnonce'], 'panels_action' ) ) {
     1082            wp_die();
     1083        }
     1084
     1085        if ( ! current_user_can( 'edit_post', $_POST['post_id'] ) ) {
     1086            wp_die();
     1087        }
     1088
     1089        if ( empty( $_POST['post_id'] ) || empty( $_POST['panels_data'] ) ) {
     1090            echo json_encode($return);
     1091            wp_die();
     1092        }
     1093
     1094        // echo the content
     1095        $old_panels_data        = get_post_meta( $_POST['post_id'], 'panels_data', true );
     1096        $panels_data            = json_decode( wp_unslash( $_POST['panels_data'] ), true );
     1097        $panels_data['widgets'] = $this->process_raw_widgets(
     1098            $panels_data['widgets'],
     1099            ! empty( $old_panels_data['widgets'] ) ? $old_panels_data['widgets'] : false,
     1100            false
     1101        );
     1102        $panels_data            = SiteOrigin_Panels_Styles_Admin::single()->sanitize_all( $panels_data );
     1103        $return['sanitized_panels_data'] = $panels_data;
     1104
     1105        // Create a version of the builder data for post content
     1106        SiteOrigin_Panels_Post_Content_Filters::add_filters();
     1107        $GLOBALS[ 'SITEORIGIN_PANELS_POST_CONTENT_RENDER' ] = true;
     1108        $return['post_content'] = SiteOrigin_Panels::renderer()->render( intval( $_POST['post_id'] ), false, $panels_data );
     1109        SiteOrigin_Panels_Post_Content_Filters::remove_filters();
     1110        unset( $GLOBALS[ 'SITEORIGIN_PANELS_POST_CONTENT_RENDER' ] );
     1111
     1112        $GLOBALS[ 'SITEORIGIN_PANELS_PREVIEW_RENDER' ] = true;
     1113        $return['preview'] = SiteOrigin_Panels::renderer()->render( intval( $_POST['post_id'] ), false, $panels_data );
     1114        unset( $GLOBALS[ 'SITEORIGIN_PANELS_PREVIEW_RENDER' ] );
     1115
     1116        echo json_encode( $return );
     1117
     1118        wp_die();
     1119    }
     1120
     1121    /**
    10741122     * Display a widget form with the provided data
    10751123     */
     
    10891137            );
    10901138        }
    1091        
     1139
    10921140        $request = array_map( 'stripslashes_deep', $_REQUEST );
    10931141
     
    11201168     */
    11211169    public function layout_block_preview() {
    1122        
     1170
    11231171        if ( empty( $_REQUEST['_panelsnonce'] ) || ! wp_verify_nonce( $_REQUEST['_panelsnonce'], 'layout-block-preview' ) ) {
    11241172            wp_die();
    11251173        }
    1126        
     1174
    11271175        $panels_data = json_decode( wp_unslash( $_POST['panelsData'] ), true );
    11281176        $builder_id = 'gbp' . uniqid();
     
    11351183        }
    11361184        $rendered_layout = SiteOrigin_Panels::renderer()->render( $builder_id, true, $panels_data, $layout_data, true );
    1137        
     1185
    11381186        // Need to explicitly call `siteorigin_widget_print_styles` because Gutenberg previews don't render a full version of the front end,
    11391187        // so neither the `wp_head` nor the `wp_footer` actions are called, which usually trigger `siteorigin_widget_print_styles`.
     
    11431191            $rendered_layout .= ob_get_clean();
    11441192        }
    1145        
     1193
    11461194        echo $rendered_layout;
    11471195        wp_die();
    11481196    }
    1149    
     1197
    11501198    public function layout_block_sanitize() {
    1151        
     1199
    11521200        if ( empty( $_REQUEST['_panelsnonce'] ) || ! wp_verify_nonce( $_REQUEST['_panelsnonce'], 'layout-block-sanitize' ) ) {
    11531201            wp_die();
    11541202        }
    1155        
     1203
    11561204        $panels_data = json_decode( wp_unslash( $_POST['panelsData'] ), true );
    11571205        $panels_data['widgets'] = SiteOrigin_Panels_Admin::single()->process_raw_widgets( $panels_data['widgets'], false, true, true );
    11581206        $panels_data = SiteOrigin_Panels_Styles_Admin::single()->sanitize_all( $panels_data );
    1159        
     1207
    11601208        wp_send_json( $panels_data );
    11611209    }
     
    12551303        <?php
    12561304    }
    1257    
     1305
    12581306    public function admin_notices() {
    12591307        global $typenow, $pagenow;
     
    12751323        }
    12761324    }
    1277    
     1325
    12781326    /**
    12791327     * Show Classic Editor for existing PB posts.
     
    12851333     */
    12861334    public function show_classic_editor_for_panels( $use_block_editor, $post_type ) {
    1287        
     1335
    12881336        // For new pages.
    12891337        if ( isset( $_GET['block-editor'] ) ) {
     
    12921340            return false;
    12931341        }
    1294        
     1342
    12951343        $post_types = siteorigin_panels_setting( 'post-types' );
    12961344        global $pagenow;
     
    13111359            $use_block_editor = false;
    13121360        }
    1313        
     1361
    13141362        return $use_block_editor;
    13151363    }
    1316    
     1364
    13171365    /**
    13181366     * This was copied from Gutenberg and slightly modified as a quick way to allow users to create new Page Builder pages
     
    13211369    function add_panels_add_new_button() {
    13221370        global $typenow;
    1323        
     1371
    13241372        if ( 'wp_block' === $typenow ) {
    13251373            ?>
     
    13311379            <?php
    13321380        }
    1333        
     1381
    13341382        if ( ! $this->show_add_new_dropdown_for_type( $typenow ) ) {
    13351383            return;
    13361384        }
    1337        
     1385
    13381386        ?>
    13391387        <style type="text/css">
     
    13411389                display: inline-block;
    13421390            }
    1343            
     1391
    13441392            .split-page-title-action a,
    13451393            .split-page-title-action a:active,
     
    13601408                outline: 0;
    13611409            }
    1362            
     1410
    13631411            .split-page-title-action a:hover,
    13641412            .split-page-title-action .expander:hover:after {
     
    13671415                color: #fff;
    13681416            }
    1369            
     1417
    13701418            .split-page-title-action a:focus,
    13711419            .split-page-title-action .expander:focus:after {
     
    13731421                box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 );
    13741422            }
    1375            
     1423
    13761424            .split-page-title-action .expander:after {
    13771425                content: "\f140";
     
    13861434                <?php echo  is_rtl() ? 'right: -1px;' : 'left: -1px;' ?>
    13871435            }
    1388            
     1436
    13891437            .split-page-title-action .dropdown {
    13901438                display: none;
    13911439            }
    1392            
     1440
    13931441            .split-page-title-action .dropdown.visible {
    13941442                display: block;
     
    13971445                z-index: 1;
    13981446            }
    1399            
     1447
    14001448            .split-page-title-action .dropdown.visible a {
    14011449                display: block;
     
    14041452                <?php echo is_rtl() ? 'padding-left: 9px;' : 'padding-right: 9px;' ?>
    14051453            }
    1406            
     1454
    14071455            .split-page-title-action .expander {
    14081456                outline: none;
     
    14101458                margin-top: 1px;
    14111459            }
    1412        
     1460
    14131461        </style>
    14141462        <script type="text/javascript">
     
    14161464                var buttons = document.getElementsByClassName( 'page-title-action' ),
    14171465                    button = buttons.item( 0 );
    1418                
     1466
    14191467                if ( ! button ) {
    14201468                    return;
    14211469                }
    1422                
     1470
    14231471                var url = button.href;
    14241472                var urlHasParams = ( -1 !== url.indexOf( '?' ) );
    14251473                var panelsUrl = url + ( urlHasParams ? '&' : '?' ) + 'siteorigin-page-builder';
    14261474                var blockEditorUrl = url + ( urlHasParams ? '&' : '?' ) + 'block-editor';
    1427                
     1475
    14281476                var newbutton = '<span id="split-page-title-action" class="split-page-title-action">';
    14291477                newbutton += '<a href="' + url + '">' + button.innerText + '</a>';
     
    14311479                newbutton += '<span class="dropdown"><a href="' + panelsUrl + '"><?php echo esc_html( __( 'SiteOrigin Page Builder', 'siteorigin-panels' ) ); ?></a>';
    14321480                newbutton += '<a href="' + blockEditorUrl + '"><?php echo esc_html( __( 'Block Editor', 'siteorigin-panels' ) ); ?></a></span></span><span class="page-title-action" style="display:none;"></span>';
    1433                
     1481
    14341482                button.insertAdjacentHTML( 'afterend', newbutton );
    14351483                button.parentNode.removeChild( button );
    1436                
     1484
    14371485                var expander = document.getElementById( 'split-page-title-action' ).getElementsByClassName( 'expander' ).item( 0 );
    14381486                var dropdown = expander.parentNode.querySelector( '.dropdown' );
     
    14541502        <?php
    14551503    }
    1456    
     1504
    14571505    private function show_add_new_dropdown_for_type( $post_type ) {
    1458        
     1506
    14591507        $show = in_array( $post_type, siteorigin_panels_setting( 'post-types' ) );
    1460        
     1508
    14611509        // WooCommerce product type doesn't support block editor...
    14621510        $show = $show && ! ( class_exists( 'WooCommerce' ) && $post_type == 'product' );
    1463        
     1511
    14641512        if ( class_exists( 'SiteOrigin_Premium_Plugin_Cpt_Builder' ) ) {
    14651513            $show = $show && $post_type != SiteOrigin_Premium_Plugin_Cpt_Builder::POST_TYPE;
     
    14681516            $show = $show && ! isset( $so_custom_types[ $post_type ] );
    14691517        }
    1470        
     1518
    14711519        return apply_filters( 'so_panels_show_add_new_dropdown_for_type', $show, $post_type );
    14721520    }
    1473    
     1521
    14741522    public function add_panels_post_state( $post_states, $post ) {
    14751523        $panels_data = get_post_meta( $post->ID, 'panels_data', true );
    1476        
     1524
    14771525        if ( ! empty( $panels_data ) ) {
    14781526            $post_states[] = __( 'SiteOrigin Page Builder', 'siteorigin-panels' );
    14791527        }
    1480        
     1528
    14811529        return $post_states;
    14821530    }
  • siteorigin-panels/tags/2.11.0/inc/css-builder.php

    r2141880 r2316661  
    3939        $attribute_string = implode( ';', $attribute_string );
    4040
    41         // Add everything we need to the CSS selector
    42         if ( empty( $this->css[ $resolution ] ) ) {
    43             $this->css[ $resolution ] = array();
    44         }
    45         if ( empty( $this->css[ $resolution ][ $attribute_string ] ) ) {
    46             $this->css[ $resolution ][ $attribute_string ] = array();
    47         }
    48         $this->css[ $resolution ][ $attribute_string ][] = $selector;
     41        if ( ! empty( $attribute_string ) ) {
     42            // Add everything we need to the CSS selector
     43            if ( empty( $this->css[ $resolution ] ) ) {
     44                $this->css[ $resolution ] = array();
     45            }
     46            if ( empty( $this->css[ $resolution ][ $attribute_string ] ) ) {
     47                $this->css[ $resolution ][ $attribute_string ] = array();
     48            }
     49           
     50            $this->css[ $resolution ][ $attribute_string ][] = $selector;
     51        }
    4952    }
    5053
  • siteorigin-panels/tags/2.11.0/inc/styles.php

    r2161603 r2316661  
    9595
    9696        $fields[ $id . '_css' ] = array(
    97             'name'        => __( 'CSS Styles', 'siteorigin-panels' ),
     97            'name'        => __( 'CSS Declarations', 'siteorigin-panels' ),
    9898            'type'        => 'code',
    9999            'group'       => 'attributes',
    100             'description' => __( 'One style attribute per line.', 'siteorigin-panels' ),
     100            'description' => __( 'One declaration per line.', 'siteorigin-panels' ),
    101101            'priority'    => 10,
    102102        );
    103103
    104104        $fields[ 'mobile_css' ] = array(
    105             'name'        => __( 'Mobile CSS Styles', 'siteorigin-panels' ),
     105            'name'        => __( 'Mobile CSS Declarations', 'siteorigin-panels' ),
    106106            'type'        => 'code',
    107107            'group'       => 'attributes',
    108             'description' => __( 'CSS applied when in mobile view.', 'siteorigin-panels' ),
     108            'description' => __( 'CSS declarations applied when in mobile view.', 'siteorigin-panels' ),
    109109            'priority'    => 11,
    110110        );
  • siteorigin-panels/tags/2.11.0/js/yoast-compat.js

    r2141880 r2316661  
    1 /* global jQuery, YoastSEO */
     1/* global jQuery, YoastSEO, _, panelsOptions */
    22
    33jQuery(function($){
     
    88    }
    99
    10     var decodeEntities = (function() {
    11         // this prevents any overhead from creating the object each time
    12         var element = document.createElement('div');
    13 
    14         function decodeHTMLEntities (str) {
    15             if(str && typeof str === 'string') {
    16                 // strip script/html tags
    17                 str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
    18                 str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
    19                 element.innerHTML = str;
    20                 str = element.textContent;
    21                 element.textContent = '';
    22             }
    23 
    24             return str;
    25         }
    26 
    27         return decodeHTMLEntities;
    28     })();
    29 
    3010    var SiteOriginYoastCompat = function() {
    3111        YoastSEO.app.registerPlugin( 'siteOriginYoastCompat', { status: 'ready' } );
     
    3414
    3515    SiteOriginYoastCompat.prototype.contentModification = function(data) {
    36         var re = new RegExp( panelsOptions.siteoriginWidgetRegex , "i" );
    37         var $data = $( '<div>' + data + '</div>' );
     16        if(
     17            typeof window.soPanelsBuilderView !== 'undefined' &&
     18            window.soPanelsBuilderView.contentPreview
     19        ) {
     20            var $data = $( window.soPanelsBuilderView.contentPreview );
    3821
    39         if( $data.find('.so-panel.widget').length === 0 ) {
    40             // Skip this for non Page builder pages
    41             return data;
     22            if( $data.find('.so-panel.widget').length === 0 ) {
     23                // Skip this for empty pages
     24                return data;
     25            }
     26
     27            // Remove style tags created by Widgets Bundle
     28            $data.find('style').remove();
     29
     30            var whitelist = [
     31                'p', 'a', 'img', 'caption', 'br',
     32                'blockquote', 'cite',
     33                'em', 'strong', 'i', 'b',
     34                'q',
     35                'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
     36                'ul', 'ol', 'li',
     37                'table', 'tr', 'th', 'td'
     38            ].join(',');
     39
     40            $data.find("*").not(whitelist).each(function() {
     41                var content = $(this).contents();
     42                $(this).replaceWith(content);
     43            });
     44
     45            data = $data.html();
    4246        }
    4347
    44         $data.find('.so-panel.widget').each(function(i, el) {
    45            
    46             var $widget = $(el);
    47             // Style wrappers prevent us from matching the widget shortcode correctly.
    48             if ( $widget.find( '> .panel-widget-style' ).length > 0 ) {
    49                 $widget = $widget.find( '> .panel-widget-style' );
    50             }
    51             var match = re.exec( $widget.html() );
    52 
    53             try{
    54                 if( ! _.isNull( match ) && $widget.html().replace( re, '' ).trim() === '' ) {
    55                     var classMatch = /class="(.*?)"/.exec(match[3]),
    56                         dataInput = jQuery(match[5]),
    57                         data = JSON.parse(decodeEntities(dataInput.val())),
    58                         widgetInstance = data.instance,
    59                         newHTML = '';
    60 
    61                     if( ! _.isNull(widgetInstance.title) ) {
    62                         newHTML += '<h3>' + widgetInstance.title + '</h3>';
    63                     }
    64 
    65                     if( ! _.isNull( classMatch ) ) {
    66                         var widgetClass = classMatch[1];
    67                         switch( widgetClass ) {
    68                             case 'SiteOrigin_Widget_Image_Widget':
    69                                 // We want a direct assignment for the SO Image Widget to get rid of the title
    70                                 newHTML = $('<img/>').attr({
    71                                     'src': '#' + widgetInstance.image,
    72                                     'srcset': '',
    73                                     'alt': widgetInstance.alt,
    74                                     'title': widgetInstance.title,
    75                                 }).prop('outerHTML');
    76                                 break;
    77 
    78                             case 'WP_Widget_Media_Image':
    79                                 newHTML = $('<img/>').attr({
    80                                     'src': '#' + widgetInstance.attachment_id,
    81                                     'srcset': '',
    82                                     'alt': widgetInstance.alt,
    83                                     'title': widgetInstance.image_title,
    84                                 }).prop('outerHTML');
    85                                 break;
    86 
    87                             case 'SiteOrigin_Widgets_ImageGrid_Widget':
    88                             case 'SiteOrigin_Widget_Simple_Masonry_Widget':
    89                                 newHTML = $( '<div/>' );
    90                                 var imgItems = widgetClass === 'SiteOrigin_Widgets_ImageGrid_Widget' ? widgetInstance.images : widgetInstance.items;
    91                                 for ( var i = 0; i < imgItems.length; i++ ) {
    92                                     var imgItem = imgItems[ i ];
    93                                     var itemHTML = $('<img/>').attr({
    94                                         'src': '#' + imgItem.image,
    95                                         'srcset': '',
    96                                         'alt': ( imgItem.hasOwnProperty( 'alt' ) ? imgItem.alt : imgItem.title ),
    97                                         'title': imgItem.title,
    98                                     });
    99 
    100                                     newHTML.append( itemHTML )
    101                                 }
    102                                 newHTML = newHTML.prop( 'outerHTML' );
    103                                 break;
    104 
    105                             case 'SiteOrigin_Widget_Accordion_Widget':
    106                             case 'SiteOrigin_Widget_Tabs_Widget':
    107                                 var contentItems = widgetClass === 'SiteOrigin_Widget_Accordion_Widget' ? widgetInstance.panels : widgetInstance.tabs;
    108                                 newHTML = $( '<div/>' );
    109                                 for ( var i = 0; i < contentItems.length; i++ ) {
    110                                     var item = contentItems[ i ];
    111                                     if ( item.content_type !== 'text' ) {
    112                                         continue;
    113                                     }
    114                                    
    115                                     newHTML.append( '<h3>' + item.title + '</h3>' );
    116                                     newHTML.append( '<div>' + item.content_text + '</div>')
    117                                 }
    118                                 newHTML = newHTML.prop( 'outerHTML' );
    119                                 break;
    120                             case 'SiteOrigin_Widget_Button_Widget':
    121                                 var hrefSeparator = widgetInstance.url.includes('://') ? '' : '#';
    122                                 newHTML = $( '<a>' + widgetInstance.text + '</a>' ).attr({
    123                                     'href': hrefSeparator + widgetInstance.url,
    124                                 }).prop('outerHTML');
    125                                 break;
    126                         }
    127                     }
    128 
    129                     $widget.html(newHTML);
    130                 }
    131             }
    132             catch(e) {
    133                 // If there was an error, just clear the widget content.
    134                 $widget.html('');
    135             }
    136 
    137         });
    138         return $data.html();
     48        return data;
    13949    };
    14050
  • siteorigin-panels/tags/2.11.0/js/yoast-compat.min.js

    r2278148 r2316661  
    1 jQuery((function(t){if(void 0!==YoastSEO.app){var e,i=(e=document.createElement("div"),function(t){return t&&"string"==typeof t&&(t=(t=t.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,"")).replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim,""),e.innerHTML=t,t=e.textContent,e.textContent=""),t}),a=function(){YoastSEO.app.registerPlugin("siteOriginYoastCompat",{status:"ready"}),YoastSEO.app.registerModification("content",this.contentModification,"siteOriginYoastCompat",5)};a.prototype.contentModification=function(e){var a=new RegExp(panelsOptions.siteoriginWidgetRegex,"i"),r=t("<div>"+e+"</div>");return 0===r.find(".so-panel.widget").length?e:(r.find(".so-panel.widget").each((function(e,r){var n=t(r);n.find("> .panel-widget-style").length>0&&(n=n.find("> .panel-widget-style"));var s=a.exec(n.html());try{if(!_.isNull(s)&&""===n.html().replace(a,"").trim()){var g=/class="(.*?)"/.exec(s[3]),o=jQuery(s[5]),l=JSON.parse(i(o.val())).instance,d="";if(_.isNull(l.title)||(d+="<h3>"+l.title+"</h3>"),!_.isNull(g)){var c=g[1];switch(c){case"SiteOrigin_Widget_Image_Widget":d=t("<img/>").attr({src:"#"+l.image,srcset:"",alt:l.alt,title:l.title}).prop("outerHTML");break;case"WP_Widget_Media_Image":d=t("<img/>").attr({src:"#"+l.attachment_id,srcset:"",alt:l.alt,title:l.image_title}).prop("outerHTML");break;case"SiteOrigin_Widgets_ImageGrid_Widget":case"SiteOrigin_Widget_Simple_Masonry_Widget":d=t("<div/>");var p="SiteOrigin_Widgets_ImageGrid_Widget"===c?l.images:l.items;for(e=0;e<p.length;e++){var m=p[e],u=t("<img/>").attr({src:"#"+m.image,srcset:"",alt:m.hasOwnProperty("alt")?m.alt:m.title,title:m.title});d.append(u)}d=d.prop("outerHTML");break;case"SiteOrigin_Widget_Accordion_Widget":case"SiteOrigin_Widget_Tabs_Widget":var h="SiteOrigin_Widget_Accordion_Widget"===c?l.panels:l.tabs;d=t("<div/>");for(e=0;e<h.length;e++){var v=h[e];"text"===v.content_type&&(d.append("<h3>"+v.title+"</h3>"),d.append("<div>"+v.content_text+"</div>"))}d=d.prop("outerHTML");break;case"SiteOrigin_Widget_Button_Widget":var f=l.url.includes("://")?"":"#";d=t("<a>"+l.text+"</a>").attr({href:f+l.url}).prop("outerHTML")}}n.html(d)}}catch(t){n.html("")}})),r.html())},new a}}));
     1jQuery((function(t){if(void 0!==YoastSEO.app){var i=function(){YoastSEO.app.registerPlugin("siteOriginYoastCompat",{status:"ready"}),YoastSEO.app.registerModification("content",this.contentModification,"siteOriginYoastCompat",5)};i.prototype.contentModification=function(i){if(void 0!==window.soPanelsBuilderView&&window.soPanelsBuilderView.contentPreview){var e=t(window.soPanelsBuilderView.contentPreview);if(0===e.find(".so-panel.widget").length)return i;e.find("style").remove();var n=["p","a","img","caption","br","blockquote","cite","em","strong","i","b","q","h1","h2","h3","h4","h5","h6","ul","ol","li","table","tr","th","td"].join(",");e.find("*").not(n).each((function(){var i=t(this).contents();t(this).replaceWith(i)})),i=e.html()}return i},new i}}));
  • siteorigin-panels/tags/2.11.0/lang/siteorigin-panels.pot

    r2298584 r2316661  
    7777msgstr ""
    7878
    79 #: inc/admin-dashboard.php:95, inc/admin.php:161
     79#: inc/admin-dashboard.php:95, inc/admin.php:162
    8080msgid "Support Forum"
    8181msgstr ""
     
    154154msgstr ""
    155155
    156 #: inc/admin.php:164, tpl/js-templates.php:44
     156#: inc/admin.php:165, tpl/js-templates.php:44
    157157msgid "Addons"
    158158msgstr ""
    159159
    160 #: inc/admin.php:178, inc/admin.php:574, inc/admin.php:1176, inc/admin.php:1181, inc/settings.php:199, tpl/js-templates.php:197
     160#: inc/admin.php:179, inc/admin.php:575, inc/admin.php:1224, inc/admin.php:1229, inc/settings.php:199, tpl/js-templates.php:197
    161161msgid "Page Builder"
    162162msgstr ""
    163163
    164 #: inc/admin.php:330
     164#: inc/admin.php:331
    165165msgid "All Widgets"
    166166msgstr ""
    167167
    168 #: inc/admin.php:357
     168#: inc/admin.php:358
    169169msgid "Missing Widget"
    170170msgstr ""
    171171
    172 #: inc/admin.php:358
     172#: inc/admin.php:359
    173173msgid "Page Builder doesn't know about this widget."
    174174msgstr ""
    175175
    176176#. translators: Number of seconds since
    177 #: inc/admin.php:362
     177#: inc/admin.php:363
    178178msgid "%d seconds"
    179179msgstr ""
    180180
    181181#. translators: Number of minutes since
    182 #: inc/admin.php:364
     182#: inc/admin.php:365
    183183msgid "%d minutes"
    184184msgstr ""
    185185
    186186#. translators: Number of hours since
    187 #: inc/admin.php:366
     187#: inc/admin.php:367
    188188msgid "%d hours"
    189189msgstr ""
    190190
    191191#. translators: A single second since
    192 #: inc/admin.php:369
     192#: inc/admin.php:370
    193193msgid "%d second"
    194194msgstr ""
    195195
    196196#. translators: A single minute since
    197 #: inc/admin.php:371
     197#: inc/admin.php:372
    198198msgid "%d minute"
    199199msgstr ""
    200200
    201201#. translators: A single hour since
    202 #: inc/admin.php:373
     202#: inc/admin.php:374
    203203msgid "%d hour"
    204204msgstr ""
    205205
    206206#. translators: Time ago - eg. "1 minute before".
    207 #: inc/admin.php:376
     207#: inc/admin.php:377
    208208msgid "%s before"
    209209msgstr ""
    210210
    211 #: inc/admin.php:377
     211#: inc/admin.php:378
    212212msgid "Now"
    213213msgstr ""
    214214
    215 #: inc/admin.php:381
     215#: inc/admin.php:382
    216216msgid "Current"
    217217msgstr ""
    218218
    219 #: inc/admin.php:382
     219#: inc/admin.php:383
    220220msgid "Original"
    221221msgstr ""
    222222
    223 #: inc/admin.php:383
     223#: inc/admin.php:384
    224224msgid "Version restored"
    225225msgstr ""
    226226
    227 #: inc/admin.php:384
     227#: inc/admin.php:385
    228228msgid "Converted to editor"
    229229msgstr ""
    230230
    231231#. translators: Message displayed in the history when a widget is deleted
    232 #: inc/admin.php:388
     232#: inc/admin.php:389
    233233msgid "Widget deleted"
    234234msgstr ""
    235235
    236236#. translators: Message displayed in the history when a widget is added
    237 #: inc/admin.php:390
     237#: inc/admin.php:391
    238238msgid "Widget added"
    239239msgstr ""
    240240
    241241#. translators: Message displayed in the history when a widget is edited
    242 #: inc/admin.php:392
     242#: inc/admin.php:393
    243243msgid "Widget edited"
    244244msgstr ""
    245245
    246246#. translators: Message displayed in the history when a widget is duplicated
    247 #: inc/admin.php:394
     247#: inc/admin.php:395
    248248msgid "Widget duplicated"
    249249msgstr ""
    250250
    251251#. translators: Message displayed in the history when a widget position is changed
    252 #: inc/admin.php:396
     252#: inc/admin.php:397
    253253msgid "Widget moved"
    254254msgstr ""
    255255
    256256#. translators: Message displayed in the history when a row is deleted
    257 #: inc/admin.php:400
     257#: inc/admin.php:401
    258258msgid "Row deleted"
    259259msgstr ""
    260260
    261261#. translators: Message displayed in the history when a row is added
    262 #: inc/admin.php:402
     262#: inc/admin.php:403
    263263msgid "Row added"
    264264msgstr ""
    265265
    266266#. translators: Message displayed in the history when a row is edited
    267 #: inc/admin.php:404
     267#: inc/admin.php:405
    268268msgid "Row edited"
    269269msgstr ""
    270270
    271271#. translators: Message displayed in the history when a row position is changed
    272 #: inc/admin.php:406
     272#: inc/admin.php:407
    273273msgid "Row moved"
    274274msgstr ""
    275275
    276276#. translators: Message displayed in the history when a row is duplicated
    277 #: inc/admin.php:408
     277#: inc/admin.php:409
    278278msgid "Row duplicated"
    279279msgstr ""
    280280
    281281#. translators: Message displayed in the history when a row is pasted
    282 #: inc/admin.php:410
     282#: inc/admin.php:411
    283283msgid "Row pasted"
    284284msgstr ""
    285285
    286 #: inc/admin.php:413
     286#: inc/admin.php:414
    287287msgid "Cell resized"
    288288msgstr ""
    289289
    290 #: inc/admin.php:416
     290#: inc/admin.php:417
    291291msgid "Prebuilt layout loaded"
    292292msgstr ""
    293293
    294 #: inc/admin.php:420
     294#: inc/admin.php:421
    295295msgid "Loading prebuilt layout"
    296296msgstr ""
    297297
    298 #: inc/admin.php:421
     298#: inc/admin.php:422
    299299msgid "Would you like to copy this editor's existing content to Page Builder?"
    300300msgstr ""
    301301
    302 #: inc/admin.php:422
     302#: inc/admin.php:423
    303303msgid "Would you like to clear your Page Builder content and revert to using the standard visual editor?"
    304304msgstr ""
    305305
    306306#. translators: This is the title for a widget called "Layout Builder"
    307 #: inc/admin.php:424
     307#: inc/admin.php:425
    308308msgid "Layout Builder Widget"
    309309msgstr ""
    310310
    311311#. translators: A standard confirmation message
    312 #: inc/admin.php:426, tpl/js-templates.php:97, tpl/js-templates.php:422
     312#: inc/admin.php:427, tpl/js-templates.php:97, tpl/js-templates.php:422
    313313msgid "Are you sure?"
    314314msgstr ""
    315315
    316316#. translators: When a layout file is ready to be inserted. %s is the filename.
    317 #: inc/admin.php:428
     317#: inc/admin.php:429
    318318msgid "%s is ready to insert."
    319319msgstr ""
    320320
    321 #: inc/admin.php:432
     321#: inc/admin.php:433
    322322msgid "Add Widget Below"
    323323msgstr ""
    324324
    325 #: inc/admin.php:433
     325#: inc/admin.php:434
    326326msgid "Add Widget to Cell"
    327327msgstr ""
    328328
    329 #: inc/admin.php:434, tpl/js-templates.php:224
     329#: inc/admin.php:435, tpl/js-templates.php:224
    330330msgid "Search Widgets"
    331331msgstr ""
    332332
    333 #: inc/admin.php:436, tpl/js-templates.php:17, tpl/js-templates.php:19
     333#: inc/admin.php:437, tpl/js-templates.php:17, tpl/js-templates.php:19
    334334msgid "Add Row"
    335335msgstr ""
    336336
    337 #: inc/admin.php:437
     337#: inc/admin.php:438
    338338msgid "Column"
    339339msgstr ""
    340340
    341 #: inc/admin.php:439
     341#: inc/admin.php:440
    342342msgid "Cell Actions"
    343343msgstr ""
    344344
    345 #: inc/admin.php:440
     345#: inc/admin.php:441
    346346msgid "Paste Widget"
    347347msgstr ""
    348348
    349 #: inc/admin.php:442
     349#: inc/admin.php:443
    350350msgid "Widget Actions"
    351351msgstr ""
    352352
    353 #: inc/admin.php:443
     353#: inc/admin.php:444
    354354msgid "Edit Widget"
    355355msgstr ""
    356356
    357 #: inc/admin.php:444
     357#: inc/admin.php:445
    358358msgid "Duplicate Widget"
    359359msgstr ""
    360360
    361 #: inc/admin.php:445
     361#: inc/admin.php:446
    362362msgid "Delete Widget"
    363363msgstr ""
    364364
    365 #: inc/admin.php:446
     365#: inc/admin.php:447
    366366msgid "Copy Widget"
    367367msgstr ""
    368368
    369 #: inc/admin.php:447
     369#: inc/admin.php:448
    370370msgid "Paste Widget Below"
    371371msgstr ""
    372372
    373 #: inc/admin.php:449
     373#: inc/admin.php:450
    374374msgid "Row Actions"
    375375msgstr ""
    376376
    377 #: inc/admin.php:450, tpl/js-templates.php:95
     377#: inc/admin.php:451, tpl/js-templates.php:95
    378378msgid "Edit Row"
    379379msgstr ""
    380380
    381 #: inc/admin.php:451, tpl/js-templates.php:96
     381#: inc/admin.php:452, tpl/js-templates.php:96
    382382msgid "Duplicate Row"
    383383msgstr ""
    384384
    385 #: inc/admin.php:452, tpl/js-templates.php:97
     385#: inc/admin.php:453, tpl/js-templates.php:97
    386386msgid "Delete Row"
    387387msgstr ""
    388388
    389 #: inc/admin.php:453
     389#: inc/admin.php:454
    390390msgid "Copy Row"
    391391msgstr ""
    392392
    393 #: inc/admin.php:454
     393#: inc/admin.php:455
    394394msgid "Paste Row"
    395395msgstr ""
    396396
    397 #: inc/admin.php:456
     397#: inc/admin.php:457
    398398msgid "Draft"
    399399msgstr ""
    400400
    401 #: inc/admin.php:457
     401#: inc/admin.php:458
    402402msgid "Untitled"
    403403msgstr ""
    404404
    405 #: inc/admin.php:459
     405#: inc/admin.php:460
    406406msgid "New Row"
    407407msgstr ""
    408408
    409 #: inc/admin.php:460, inc/admin.php:468, inc/styles.php:189, tpl/js-templates.php:62
     409#: inc/admin.php:461, inc/admin.php:469, inc/styles.php:189, tpl/js-templates.php:62
    410410msgid "Row"
    411411msgstr ""
    412412
    413 #: inc/admin.php:463
     413#: inc/admin.php:464
    414414msgid "Hmmm... Adding layout elements is not enabled. Please check if Page Builder has been configured to allow adding elements."
    415415msgstr ""
    416416
    417 #: inc/admin.php:464
     417#: inc/admin.php:465
    418418msgid "Add a {{%= items[0] %}} to get started."
    419419msgstr ""
    420420
    421 #: inc/admin.php:465
     421#: inc/admin.php:466
    422422msgid "Add a {{%= items[0] %}} or {{%= items[1] %}} to get started."
    423423msgstr ""
    424424
    425 #: inc/admin.php:466
     425#: inc/admin.php:467
    426426msgid "Add a {{%= items[0] %}}, {{%= items[1] %}} or {{%= items[2] %}} to get started."
    427427msgstr ""
    428428
    429 #: inc/admin.php:467, inc/styles.php:341, tpl/js-templates.php:61
     429#: inc/admin.php:468, inc/styles.php:341, tpl/js-templates.php:61
    430430msgid "Widget"
    431431msgstr ""
    432432
    433 #: inc/admin.php:469, tpl/js-templates.php:63
     433#: inc/admin.php:470, tpl/js-templates.php:63
    434434msgid "Prebuilt Layout"
    435435msgstr ""
    436436
    437 #: inc/admin.php:471
     437#: inc/admin.php:472
    438438msgid "Read our %s if you need help."
    439439msgstr ""
    440440
    441 #: inc/admin.php:472, tpl/js-templates.php:64
     441#: inc/admin.php:473, tpl/js-templates.php:64
    442442msgid "documentation"
    443443msgstr ""
    444444
    445 #: inc/admin.php:481
     445#: inc/admin.php:482
    446446msgid "Page Builder layouts"
    447447msgstr ""
    448448
    449 #: inc/admin.php:482
     449#: inc/admin.php:483
    450450msgid "Error uploading or importing file."
    451451msgstr ""
    452452
    453 #: inc/admin.php:489
     453#: inc/admin.php:490
    454454msgid "Unknown error. Failed to load the form. Please check your internet connection, contact your web site administrator, or try again later."
    455455msgstr ""
    456456
    457457#. translators: This is the default name given to a user's home page
    458 #: inc/admin.php:657, inc/home.php:26
     458#: inc/admin.php:658, inc/home.php:26
    459459msgid "Home Page"
    460460msgstr ""
    461461
    462 #: inc/admin.php:758
     462#: inc/admin.php:759
    463463msgid "Untitled Widget"
    464464msgstr ""
    465465
    466 #: inc/admin.php:938
     466#: inc/admin.php:939
    467467msgid "You need to install 1{%1$s} to use the widget 2{%2$s}."
    468468msgstr ""
    469469
    470 #: inc/admin.php:944
     470#: inc/admin.php:945
    471471msgid "Save and reload this page to start using the widget after you've installed it."
    472472msgstr ""
    473473
    474 #: inc/admin.php:960
     474#: inc/admin.php:961
    475475msgid "The widget 1{%1$s} is not available. Please try locate and install the missing plugin. Post on the 2{support forums} if you need help."
    476476msgstr ""
    477477
    478 #: inc/admin.php:1079, inc/styles-admin.php:23
     478#: inc/admin.php:1127, inc/styles-admin.php:23
    479479msgid "The supplied nonce is invalid."
    480480msgstr ""
    481481
    482 #: inc/admin.php:1080, inc/styles-admin.php:24
     482#: inc/admin.php:1128, inc/styles-admin.php:24
    483483msgid "Invalid nonce."
    484484msgstr ""
    485485
    486 #: inc/admin.php:1086
     486#: inc/admin.php:1134
    487487msgid "Please specify the type of widget form to be rendered."
    488488msgstr ""
    489489
    490 #: inc/admin.php:1087
     490#: inc/admin.php:1135
    491491msgid "Missing widget type."
    492492msgstr ""
    493493
    494 #: inc/admin.php:1194
     494#: inc/admin.php:1242
    495495msgid "%s Widget"
    496496msgid_plural "%s Widgets"
     
    498498msgstr[1] ""
    499499
    500 #: inc/admin.php:1237
     500#: inc/admin.php:1285
    501501msgid "Get a lightbox addon for SiteOrigin widgets"
    502502msgstr ""
    503503
    504 #: inc/admin.php:1241
     504#: inc/admin.php:1289
    505505msgid "Get the row, cell and widget animations addon"
    506506msgstr ""
    507507
    508 #: inc/admin.php:1245
     508#: inc/admin.php:1293
    509509msgid "Get premium email support for SiteOrigin Page Builder"
    510510msgstr ""
    511511
    512 #: inc/admin.php:1430
     512#: inc/admin.php:1478
    513513msgid "Toggle editor selection menu"
    514514msgstr ""
    515515
    516 #: inc/admin.php:1431, inc/admin.php:1478, inc/settings.php:199, settings/tpl/settings.php:9
     516#: inc/admin.php:1479, inc/admin.php:1526, inc/settings.php:199, settings/tpl/settings.php:9
    517517msgid "SiteOrigin Page Builder"
    518518msgstr ""
    519519
    520 #: inc/admin.php:1432
     520#: inc/admin.php:1480
    521521msgid "Block Editor"
    522522msgstr ""
     
    859859
    860860#: inc/styles.php:97
    861 msgid "CSS Styles"
     861msgid "CSS Declarations"
    862862msgstr ""
    863863
    864864#: inc/styles.php:100
    865 msgid "One style attribute per line."
     865msgid "One declaration per line."
    866866msgstr ""
    867867
    868868#: inc/styles.php:105
    869 msgid "Mobile CSS Styles"
     869msgid "Mobile CSS Declarations"
    870870msgstr ""
    871871
    872872#: inc/styles.php:108
    873 msgid "CSS applied when in mobile view."
     873msgid "CSS declarations applied when in mobile view."
    874874msgstr ""
    875875
  • siteorigin-panels/tags/2.11.0/readme.txt

    r2307143 r2316661  
    33Requires at least: 4.7
    44Tested up to: 5.5
    5 Stable tag: 2.10.17
    6 Build time: 2020-05-18T13:30:18+02:00
     5Stable tag: 2.11.0
     6Build time: 2020-06-02T16:27:51+02:00
    77License: GPLv3
    88License URI: http://www.gnu.org/licenses/gpl.html
     
    9696
    9797== Changelog ==
     98
     99= 2.11.0 - 02 June 2020 =
     100* Live Editor: Ensured device viewing mode retained after update.
     101* Live Editor: Improved device preview transition.
     102* Legacy Layout: Detect IE 11 as legacy browser.
     103* Yoast SEO: Improved Classic Editor support.
     104* Yoast SEO: Added Block Editor support for the SiteOrigin Layout block.
     105* CSS Builder: Prevented rules without declarations from outputting.
     106* Widget Previews: Prevented boolean values from being used as widget descriptions.
     107* Live Editor: Resolved Chrome bug by setting preview url for iframe.
    98108
    99109= 2.10.17 - 18 May 2020 =
  • siteorigin-panels/tags/2.11.0/siteorigin-panels.php

    r2307143 r2316661  
    44Plugin URI: https://siteorigin.com/page-builder/
    55Description: A drag and drop, responsive page builder that simplifies building your website.
    6 Version: 2.10.17
     6Version: 2.11.0
    77Author: SiteOrigin
    88Author URI: https://siteorigin.com
     
    1212*/
    1313
    14 define( 'SITEORIGIN_PANELS_VERSION', '2.10.17' );
     14define( 'SITEORIGIN_PANELS_VERSION', '2.11.0' );
    1515if ( ! defined( 'SITEORIGIN_PANELS_JS_SUFFIX' ) ) {
    1616    define( 'SITEORIGIN_PANELS_JS_SUFFIX', '.min' );
    1717}
    1818define( 'SITEORIGIN_PANELS_CSS_SUFFIX', '.min' );
    19 define( 'SITEORIGIN_PANELS_VERSION_SUFFIX', '-21017' );
     19define( 'SITEORIGIN_PANELS_VERSION_SUFFIX', '-2110' );
    2020
    2121require_once plugin_dir_path( __FILE__ ) . 'inc/functions.php';
     
    126126       
    127127        return
    128             // IE lte 10
    129             ( preg_match('/MSIE\s(?P<v>\d+)/i', $agent, $B) && $B['v'] <= 10 ) ||
     128            // IE lte 11
     129            ( preg_match('/Trident\/(?P<v>\d+)/i', $agent, $B) && $B['v'] <= 7 ) ||
    130130            // Chrome lte 25
    131131            ( preg_match('/Chrome\/(?P<v>\d+)/i', $agent, $B) && $B['v'] <= 25 ) ||
  • siteorigin-panels/trunk/compat/js/siteorigin-panels-layout-block.js

    r2278148 r2316661  
    266266    panelsData: {
    267267      type: 'object'
     268    },
     269    contentPreview: {
     270      type: 'string'
    268271    }
    269272  },
     
    276279      if (!_.isEmpty(newPanelsData.widgets)) {
    277280        // Send panelsData to server for sanitization.
    278         jQuery.post(soPanelsBlockEditorAdmin.sanitizeUrl, {
    279           action: 'so_panels_layout_block_sanitize',
    280           panelsData: JSON.stringify(newPanelsData)
    281         }, function (sanitizedPanelsData) {
    282           if (sanitizedPanelsData !== '') {
    283             setAttributes({
    284               panelsData: sanitizedPanelsData
    285             });
    286           }
     281        jQuery.post(panelsOptions.ajaxurl, {
     282          action: 'so_panels_builder_content_json',
     283          panels_data: JSON.stringify(newPanelsData),
     284          post_id: wp.data.select("core/editor").getCurrentPostId()
     285        }, function (content) {
     286          var panelsAttributes = {};
     287
     288          if (content.sanitized_panels_data !== '') {
     289            panelsAttributes.panelsData = content.sanitized_panels_data;
     290          }
     291
     292          if (content.preview !== '') {
     293            panelsAttributes.contentPreview = content.preview;
     294          }
     295
     296          setAttributes(panelsAttributes);
    287297        });
    288298      }
     
    304314    });
    305315  },
    306   save: function save() {
    307     // Render in PHP
    308     return null;
     316  save: function save(_ref2) {
     317    var attributes = _ref2.attributes;
     318    return attributes.hasOwnProperty('contentPreview') ? React.createElement(RawHTML, null, attributes.contentPreview) : null;
    309319  }
    310320});
  • siteorigin-panels/trunk/compat/js/siteorigin-panels-layout-block.min.js

    r2278148 r2316661  
    1 "use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}function _possibleConstructorReturn(e,t){return!t||"object"!==_typeof(t)&&"function"!=typeof t?_assertThisInitialized(e):t}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _getPrototypeOf(e){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_setPrototypeOf(e,t)}function _setPrototypeOf(e,t){return(_setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var _lodash=lodash,isEqual=_lodash.isEqual,debounce=_lodash.debounce,isEmpty=_lodash.isEmpty,isFunction=_lodash.isFunction,registerBlockType=wp.blocks.registerBlockType,_wp$element=wp.element,Component=_wp$element.Component,Fragment=_wp$element.Fragment,RawHTML=_wp$element.RawHTML,createRef=_wp$element.createRef,BlockControls=wp.editor.BlockControls,_wp$components=wp.components,Toolbar=_wp$components.Toolbar,IconButton=_wp$components.IconButton,Spinner=_wp$components.Spinner,__=wp.i18n.__,_window=window,soPanelsBlockEditorAdmin=_window.soPanelsBlockEditorAdmin,SiteOriginPanelsLayoutBlock=function(e){function t(e){var n;_classCallCheck(this,t),n=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this,e));var i="edit"===soPanelsBlockEditorAdmin.defaultMode||isEmpty(e.panelsData);return n.state={editing:i,loadingPreview:!i,previewHtml:""},n.panelsContainer=createRef(),n.previewContainer=createRef(),n.panelsInitialized=!1,n.previewInitialized=!1,n}return _inherits(t,Component),_createClass(t,[{key:"componentDidMount",value:function(){this.isStillMounted=!0,this.state.editing?this.setupPanels():this.state.editing||this.previewInitialized||(this.fetchPreview(this.props),this.fetchPreview=debounce(this.fetchPreview,500))}},{key:"componentWillUnmount",value:function(){this.isStillMounted=!1,this.builderView&&this.builderView.off("content_change")}},{key:"componentDidUpdate",value:function(e){this.state.editing&&!this.panelsInitialized?this.setupPanels():this.state.loadingPreview?this.fetchPreview(this.props):!this.previewInitialized&&this.previewContainer.current&&(jQuery(document).trigger("panels_setup_preview"),this.previewInitialized=!0)}},{key:"setupPanels",value:function(){var e=this,t=jQuery(this.panelsContainer.current),n=new panels.model.builder;this.builderView=new panels.view.builder({model:n,config:{editorType:"standalone"}});var i=JSON.parse(JSON.stringify(jQuery.extend({},this.props.panelsData))),o=function(){isFunction(e.props.onRowOrWidgetMouseDown)&&e.props.onRowOrWidgetMouseDown();jQuery(document).on("mouseup",(function t(){jQuery(document).off("mouseup",t),isFunction(e.props.onRowOrWidgetMouseUp)&&e.props.onRowOrWidgetMouseUp()}))};this.builderView.on("row_added",(function(){e.builderView.$(".so-row-move").off("mousedown",o),e.builderView.$(".so-row-move").on("mousedown",o),e.builderView.$(".so-widget").off("mousedown",o),e.builderView.$(".so-widget").on("mousedown",o)})),this.builderView.on("widget_added",(function(){e.builderView.$(".so-widget").off("mousedown",o),e.builderView.$(".so-widget").on("mousedown",o)})),this.builderView.render().attach({container:t}).setData(i),this.builderView.trigger("builder_resize"),this.builderView.on("content_change",(function(){var t=e.builderView.getData();e.panelsDataChanged=!isEqual(i,t),e.panelsDataChanged&&(e.props.onContentChange&&isFunction(e.props.onContentChange)&&e.props.onContentChange(t),e.setState({loadingPreview:!0,previewHtml:""}))})),jQuery(document).trigger("panels_setup",this.builderView),this.panelsInitialized=!0}},{key:"fetchPreview",value:function(e){var t=this;if(this.isStillMounted){this.previewInitialized=!1;var n=this.currentFetchRequest=jQuery.post({url:soPanelsBlockEditorAdmin.previewUrl,data:{action:"so_panels_layout_block_preview",panelsData:JSON.stringify(e.panelsData)}}).then((function(e){t.isStillMounted&&n===t.currentFetchRequest&&e&&t.setState({previewHtml:e,loadingPreview:!1})}));return n}}},{key:"render",value:function(){var e=this,t=this.props.panelsData;if(this.state.editing)return React.createElement(Fragment,null,React.createElement(BlockControls,null,React.createElement(Toolbar,null,React.createElement(IconButton,{icon:"visibility",className:"components-icon-button components-toolbar__control",label:__("Preview layout.","siteorigin-panels"),onClick:function(){t&&e.setState({editing:!1})}}))),React.createElement("div",{key:"layout-block",className:"siteorigin-panels-layout-block-container",ref:this.panelsContainer}));var n=this.state.loadingPreview;return React.createElement(Fragment,null,React.createElement(BlockControls,null,React.createElement(Toolbar,null,React.createElement(IconButton,{icon:"edit",className:"components-icon-button components-toolbar__control",label:__("Edit layout.","siteorigin-panels"),onClick:function(){e.panelsInitialized=!1,e.setState({editing:!0})}}))),React.createElement("div",{key:"preview",className:"so-panels-block-layout-preview-container"},n?React.createElement("div",{className:"so-panels-spinner-container"},React.createElement("span",null,React.createElement(Spinner,null))):React.createElement("div",{className:"so-panels-raw-html-container",ref:this.previewContainer},React.createElement(RawHTML,null,this.state.previewHtml))))}}]),t}();registerBlockType("siteorigin-panels/layout-block",{title:__("SiteOrigin Layout","siteorigin-panels"),description:__("Build a layout using SiteOrigin's Page Builder.","siteorigin-panels"),icon:function(){return React.createElement("span",{className:"siteorigin-panels-block-icon"})},category:"layout",keywords:["page builder","column,grid","panel"],supports:{html:!1},attributes:{panelsData:{type:"object"}},edit:function(e){var t=e.attributes,n=e.setAttributes,i=e.toggleSelection;return React.createElement(SiteOriginPanelsLayoutBlock,{panelsData:t.panelsData,onContentChange:function(e){_.isEmpty(e.widgets)||jQuery.post(soPanelsBlockEditorAdmin.sanitizeUrl,{action:"so_panels_layout_block_sanitize",panelsData:JSON.stringify(e)},(function(e){""!==e&&n({panelsData:e})}))},onRowOrWidgetMouseDown:function(){i(!1)},onRowOrWidgetMouseUp:function(){i(!0)}})},save:function(){return null}}),function(e){soPanelsBlockEditorAdmin.showAddButton&&e((function(){setTimeout((function(){var t=wp.data.dispatch("core/editor"),n=wp.data.select("core/editor"),i=e("#siteorigin-panels-add-layout-block-button").html(),o=e(i).insertAfter(".editor-writing-flow > div:first, .block-editor-writing-flow > div:not([tabindex])");o.on("click",(function(){var e=wp.blocks.createBlock("siteorigin-panels/layout-block",{});if(n.isEditedPostEmpty()){var i=n.getBlocks();i.length?t.replaceBlock(i[0].clientId,e):t.insertBlock(e)}else t.insertBlock(e)}));var r=function(){wp.data.select("core/editor").isEditedPostEmpty()?o.show():o.hide()};wp.data.subscribe(r),r()}),100)}))}(jQuery);
     1"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}function _possibleConstructorReturn(e,t){return!t||"object"!==_typeof(t)&&"function"!=typeof t?_assertThisInitialized(e):t}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _getPrototypeOf(e){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_setPrototypeOf(e,t)}function _setPrototypeOf(e,t){return(_setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var _lodash=lodash,isEqual=_lodash.isEqual,debounce=_lodash.debounce,isEmpty=_lodash.isEmpty,isFunction=_lodash.isFunction,registerBlockType=wp.blocks.registerBlockType,_wp$element=wp.element,Component=_wp$element.Component,Fragment=_wp$element.Fragment,RawHTML=_wp$element.RawHTML,createRef=_wp$element.createRef,BlockControls=wp.editor.BlockControls,_wp$components=wp.components,Toolbar=_wp$components.Toolbar,IconButton=_wp$components.IconButton,Spinner=_wp$components.Spinner,__=wp.i18n.__,_window=window,soPanelsBlockEditorAdmin=_window.soPanelsBlockEditorAdmin,SiteOriginPanelsLayoutBlock=function(e){function t(e){var n;_classCallCheck(this,t),n=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this,e));var i="edit"===soPanelsBlockEditorAdmin.defaultMode||isEmpty(e.panelsData);return n.state={editing:i,loadingPreview:!i,previewHtml:""},n.panelsContainer=createRef(),n.previewContainer=createRef(),n.panelsInitialized=!1,n.previewInitialized=!1,n}return _inherits(t,Component),_createClass(t,[{key:"componentDidMount",value:function(){this.isStillMounted=!0,this.state.editing?this.setupPanels():this.state.editing||this.previewInitialized||(this.fetchPreview(this.props),this.fetchPreview=debounce(this.fetchPreview,500))}},{key:"componentWillUnmount",value:function(){this.isStillMounted=!1,this.builderView&&this.builderView.off("content_change")}},{key:"componentDidUpdate",value:function(e){this.state.editing&&!this.panelsInitialized?this.setupPanels():this.state.loadingPreview?this.fetchPreview(this.props):!this.previewInitialized&&this.previewContainer.current&&(jQuery(document).trigger("panels_setup_preview"),this.previewInitialized=!0)}},{key:"setupPanels",value:function(){var e=this,t=jQuery(this.panelsContainer.current),n=new panels.model.builder;this.builderView=new panels.view.builder({model:n,config:{editorType:"standalone"}});var i=JSON.parse(JSON.stringify(jQuery.extend({},this.props.panelsData))),o=function(){isFunction(e.props.onRowOrWidgetMouseDown)&&e.props.onRowOrWidgetMouseDown();jQuery(document).on("mouseup",(function t(){jQuery(document).off("mouseup",t),isFunction(e.props.onRowOrWidgetMouseUp)&&e.props.onRowOrWidgetMouseUp()}))};this.builderView.on("row_added",(function(){e.builderView.$(".so-row-move").off("mousedown",o),e.builderView.$(".so-row-move").on("mousedown",o),e.builderView.$(".so-widget").off("mousedown",o),e.builderView.$(".so-widget").on("mousedown",o)})),this.builderView.on("widget_added",(function(){e.builderView.$(".so-widget").off("mousedown",o),e.builderView.$(".so-widget").on("mousedown",o)})),this.builderView.render().attach({container:t}).setData(i),this.builderView.trigger("builder_resize"),this.builderView.on("content_change",(function(){var t=e.builderView.getData();e.panelsDataChanged=!isEqual(i,t),e.panelsDataChanged&&(e.props.onContentChange&&isFunction(e.props.onContentChange)&&e.props.onContentChange(t),e.setState({loadingPreview:!0,previewHtml:""}))})),jQuery(document).trigger("panels_setup",this.builderView),this.panelsInitialized=!0}},{key:"fetchPreview",value:function(e){var t=this;if(this.isStillMounted){this.previewInitialized=!1;var n=this.currentFetchRequest=jQuery.post({url:soPanelsBlockEditorAdmin.previewUrl,data:{action:"so_panels_layout_block_preview",panelsData:JSON.stringify(e.panelsData)}}).then((function(e){t.isStillMounted&&n===t.currentFetchRequest&&e&&t.setState({previewHtml:e,loadingPreview:!1})}));return n}}},{key:"render",value:function(){var e=this,t=this.props.panelsData;if(this.state.editing)return React.createElement(Fragment,null,React.createElement(BlockControls,null,React.createElement(Toolbar,null,React.createElement(IconButton,{icon:"visibility",className:"components-icon-button components-toolbar__control",label:__("Preview layout.","siteorigin-panels"),onClick:function(){t&&e.setState({editing:!1})}}))),React.createElement("div",{key:"layout-block",className:"siteorigin-panels-layout-block-container",ref:this.panelsContainer}));var n=this.state.loadingPreview;return React.createElement(Fragment,null,React.createElement(BlockControls,null,React.createElement(Toolbar,null,React.createElement(IconButton,{icon:"edit",className:"components-icon-button components-toolbar__control",label:__("Edit layout.","siteorigin-panels"),onClick:function(){e.panelsInitialized=!1,e.setState({editing:!0})}}))),React.createElement("div",{key:"preview",className:"so-panels-block-layout-preview-container"},n?React.createElement("div",{className:"so-panels-spinner-container"},React.createElement("span",null,React.createElement(Spinner,null))):React.createElement("div",{className:"so-panels-raw-html-container",ref:this.previewContainer},React.createElement(RawHTML,null,this.state.previewHtml))))}}]),t}();registerBlockType("siteorigin-panels/layout-block",{title:__("SiteOrigin Layout","siteorigin-panels"),description:__("Build a layout using SiteOrigin's Page Builder.","siteorigin-panels"),icon:function(){return React.createElement("span",{className:"siteorigin-panels-block-icon"})},category:"layout",keywords:["page builder","column,grid","panel"],supports:{html:!1},attributes:{panelsData:{type:"object"},contentPreview:{type:"string"}},edit:function(e){var t=e.attributes,n=e.setAttributes,i=e.toggleSelection;return React.createElement(SiteOriginPanelsLayoutBlock,{panelsData:t.panelsData,onContentChange:function(e){_.isEmpty(e.widgets)||jQuery.post(panelsOptions.ajaxurl,{action:"so_panels_builder_content_json",panels_data:JSON.stringify(e),post_id:wp.data.select("core/editor").getCurrentPostId()},(function(e){var t={};""!==e.sanitized_panels_data&&(t.panelsData=e.sanitized_panels_data),""!==e.preview&&(t.contentPreview=e.preview),n(t)}))},onRowOrWidgetMouseDown:function(){i(!1)},onRowOrWidgetMouseUp:function(){i(!0)}})},save:function(e){var t=e.attributes;return t.hasOwnProperty("contentPreview")?React.createElement(RawHTML,null,t.contentPreview):null}}),function(e){soPanelsBlockEditorAdmin.showAddButton&&e((function(){setTimeout((function(){var t=wp.data.dispatch("core/editor"),n=wp.data.select("core/editor"),i=e("#siteorigin-panels-add-layout-block-button").html(),o=e(i).insertAfter(".editor-writing-flow > div:first, .block-editor-writing-flow > div:not([tabindex])");o.on("click",(function(){var e=wp.blocks.createBlock("siteorigin-panels/layout-block",{});if(n.isEditedPostEmpty()){var i=n.getBlocks();i.length?t.replaceBlock(i[0].clientId,e):t.insertBlock(e)}else t.insertBlock(e)}));var r=function(){wp.data.select("core/editor").isEditedPostEmpty()?o.show():o.hide()};wp.data.subscribe(r),r()}),100)}))}(jQuery);
  • siteorigin-panels/trunk/inc/admin.php

    r2298584 r2316661  
    5353        // Register all the admin actions
    5454        add_action( 'wp_ajax_so_panels_builder_content', array( $this, 'action_builder_content' ) );
     55        add_action( 'wp_ajax_so_panels_builder_content_json', array( $this, 'action_builder_content_json' ) );
    5556        add_action( 'wp_ajax_so_panels_widget_form', array( $this, 'action_widget_form' ) );
    5657        add_action( 'wp_ajax_so_panels_live_editor_preview', array( $this, 'action_live_editor_preview' ) );
     
    6768
    6869        $this->in_save_post = false;
    69        
    70        
     70
     71
    7172        // Enqueue Yoast compatibility
    7273        add_action( 'admin_print_scripts-post-new.php', array( $this, 'enqueue_yoast_compat' ), 100 );
    7374        add_action( 'admin_print_scripts-post.php', array( $this, 'enqueue_yoast_compat' ), 100 );
    74        
     75
    7576        // Block editor specific actions
    7677        if ( function_exists( 'register_block_type' ) ) {
     
    141142            }
    142143        }
    143        
     144
    144145        return $is_gutenberg_page || $is_block_editor;
    145146    }
     
    157158            return $links;
    158159        }
    159        
     160
    160161        unset( $links['edit'] );
    161162        $links[] = '<a href="http://siteorigin.com/threads/plugin-page-builder/">' . __( 'Support Forum', 'siteorigin-panels' ) . '</a>';
     
    172173     */
    173174    function add_meta_boxes() {
    174        
     175
    175176        foreach ( siteorigin_panels_setting( 'post-types' ) as $type ) {
    176177            add_meta_box(
     
    231232            false
    232233        );
    233        
     234
    234235        if ( siteorigin_panels_setting( 'sidebars-emulator' ) ) {
    235236            $sidebars_emulator = SiteOrigin_Panels_Sidebars_Emulator::single();
    236237            $panels_data['widgets'] = $sidebars_emulator->generate_sidebar_widget_ids( $panels_data['widgets'], $post_id );
    237238        }
    238        
     239
    239240        $panels_data = SiteOrigin_Panels_Styles_Admin::single()->sanitize_all( $panels_data );
    240241        $panels_data = apply_filters( 'siteorigin_panels_data_pre_save', $panels_data, $post, $post_id );
     
    248249                $post_parent_id = wp_is_post_revision( $post_id );
    249250                $layout_id = ( ! empty( $post_parent_id ) ) ? $post_parent_id : $post_id;
    250                
     251
    251252                SiteOrigin_Panels_Post_Content_Filters::add_filters();
    252253                $GLOBALS[ 'SITEORIGIN_PANELS_POST_CONTENT_RENDER' ] = true;
     
    319320
    320321            $user = wp_get_current_user();
    321            
     322
    322323            $load_on_attach = siteorigin_panels_setting( 'load-on-attach' ) || isset( $_GET['siteorigin-page-builder'] );
    323324            wp_localize_script( 'so-panels-admin', 'panelsOptions', array(
     
    490491                )
    491492            ) );
    492            
     493
    493494            $js_widgets = array();
    494495            if ( $screen->base != 'widgets' ) {
     
    506507                    do_action_ref_array( 'in_widget_form', array( &$widget_obj, &$return, array() ) );
    507508                    ob_end_clean();
    508                    
     509
    509510                    // Need to render templates for new WP 4.8 widgets when not on the 'widgets' screen or in the customizer.
    510511                    if ( $this->is_core_js_widget( $widget_obj ) ) {
     
    684685            false
    685686        );
    686        
     687
    687688        if ( siteorigin_panels_setting( 'sidebars-emulator' ) ) {
    688689            $sidebars_emulator = SiteOrigin_Panels_Sidebars_Emulator::single();
    689690            $panels_data['widgets'] = $sidebars_emulator->generate_sidebar_widget_ids( $panels_data['widgets'], $page_id );
    690691        }
    691        
     692
    692693        $panels_data            = SiteOrigin_Panels_Styles_Admin::single()->sanitize_all( $panels_data );
    693694        $panels_data            = apply_filters( 'siteorigin_panels_data_pre_save', $panels_data, $page, $page_id );
     
    777778        // Other plugins can manipulate the list of widgets. Possibly to add recommended widgets
    778779        $widgets = apply_filters( 'siteorigin_panels_widgets', $widgets );
    779        
     780
    780781        // Exclude these temporarily, as they won't work until we have a reliable way to enqueue their admin form scripts.
    781782        $to_exclude = array(
     
    785786            'Jetpack_Twitter_Timeline_Widget'
    786787        );
    787        
     788
    788789        foreach ( $to_exclude as $widget_class ) {
    789790            if ( in_array( $widget_class, $widgets ) ) {
     
    878879
    879880                    $widget = $instance;
    880                    
     881
    881882                    unset( $info['raw'] );
    882883                }
     
    887888                $info[ 'class' ] = preg_replace( '/\\\\+/', '\\\\\\\\', $info['class'] );
    888889            }
    889            
     890
    890891            $widget['panels_info'] = $info;
    891892        }
     
    912913     */
    913914    function render_form( $widget_class, $instance = array(), $raw = false, $widget_number = '{$id}' ) {
    914        
     915
    915916        $the_widget = SiteOrigin_Panels::get_widget_instance( $widget_class );
    916917        // This is a chance for plugins to replace missing widgets
    917918        $the_widget = apply_filters( 'siteorigin_panels_widget_object', $the_widget, $widget_class );
    918        
     919
    919920        if ( empty( $the_widget ) || ! is_a( $the_widget, 'WP_Widget' ) ) {
    920921            $widgets = $this->get_widgets();
     
    10001001        return $form;
    10011002    }
    1002    
     1003
    10031004    /**
    10041005     * Checks whether a widget is considered to be a JS widget. I.e. it needs to have scripts and/or styles enqueued for
     
    10201021            'WP_Widget_Text',
    10211022        );
    1022        
     1023
    10231024        $is_js_widget = in_array( get_class( $widget ), $js_widgets ) &&
    10241025                        // Need to check this for `WP_Widget_Text` which was not a JS widget before 4.8
    10251026                        method_exists( $widget, 'render_control_template_scripts' );
    1026        
     1027
    10271028        return $is_js_widget;
    10281029    }
     
    10721073
    10731074    /**
     1075     * Get builder content based on the submitted panels_data.
     1076     */
     1077    function action_builder_content_json() {
     1078        header( 'content-type: application/json' );
     1079        $return = array('post_content' => '', 'preview' => '', 'sanitized_panels_data' => '');
     1080
     1081        if ( ! wp_verify_nonce( $_GET['_panelsnonce'], 'panels_action' ) ) {
     1082            wp_die();
     1083        }
     1084
     1085        if ( ! current_user_can( 'edit_post', $_POST['post_id'] ) ) {
     1086            wp_die();
     1087        }
     1088
     1089        if ( empty( $_POST['post_id'] ) || empty( $_POST['panels_data'] ) ) {
     1090            echo json_encode($return);
     1091            wp_die();
     1092        }
     1093
     1094        // echo the content
     1095        $old_panels_data        = get_post_meta( $_POST['post_id'], 'panels_data', true );
     1096        $panels_data            = json_decode( wp_unslash( $_POST['panels_data'] ), true );
     1097        $panels_data['widgets'] = $this->process_raw_widgets(
     1098            $panels_data['widgets'],
     1099            ! empty( $old_panels_data['widgets'] ) ? $old_panels_data['widgets'] : false,
     1100            false
     1101        );
     1102        $panels_data            = SiteOrigin_Panels_Styles_Admin::single()->sanitize_all( $panels_data );
     1103        $return['sanitized_panels_data'] = $panels_data;
     1104
     1105        // Create a version of the builder data for post content
     1106        SiteOrigin_Panels_Post_Content_Filters::add_filters();
     1107        $GLOBALS[ 'SITEORIGIN_PANELS_POST_CONTENT_RENDER' ] = true;
     1108        $return['post_content'] = SiteOrigin_Panels::renderer()->render( intval( $_POST['post_id'] ), false, $panels_data );
     1109        SiteOrigin_Panels_Post_Content_Filters::remove_filters();
     1110        unset( $GLOBALS[ 'SITEORIGIN_PANELS_POST_CONTENT_RENDER' ] );
     1111
     1112        $GLOBALS[ 'SITEORIGIN_PANELS_PREVIEW_RENDER' ] = true;
     1113        $return['preview'] = SiteOrigin_Panels::renderer()->render( intval( $_POST['post_id'] ), false, $panels_data );
     1114        unset( $GLOBALS[ 'SITEORIGIN_PANELS_PREVIEW_RENDER' ] );
     1115
     1116        echo json_encode( $return );
     1117
     1118        wp_die();
     1119    }
     1120
     1121    /**
    10741122     * Display a widget form with the provided data
    10751123     */
     
    10891137            );
    10901138        }
    1091        
     1139
    10921140        $request = array_map( 'stripslashes_deep', $_REQUEST );
    10931141
     
    11201168     */
    11211169    public function layout_block_preview() {
    1122        
     1170
    11231171        if ( empty( $_REQUEST['_panelsnonce'] ) || ! wp_verify_nonce( $_REQUEST['_panelsnonce'], 'layout-block-preview' ) ) {
    11241172            wp_die();
    11251173        }
    1126        
     1174
    11271175        $panels_data = json_decode( wp_unslash( $_POST['panelsData'] ), true );
    11281176        $builder_id = 'gbp' . uniqid();
     
    11351183        }
    11361184        $rendered_layout = SiteOrigin_Panels::renderer()->render( $builder_id, true, $panels_data, $layout_data, true );
    1137        
     1185
    11381186        // Need to explicitly call `siteorigin_widget_print_styles` because Gutenberg previews don't render a full version of the front end,
    11391187        // so neither the `wp_head` nor the `wp_footer` actions are called, which usually trigger `siteorigin_widget_print_styles`.
     
    11431191            $rendered_layout .= ob_get_clean();
    11441192        }
    1145        
     1193
    11461194        echo $rendered_layout;
    11471195        wp_die();
    11481196    }
    1149    
     1197
    11501198    public function layout_block_sanitize() {
    1151        
     1199
    11521200        if ( empty( $_REQUEST['_panelsnonce'] ) || ! wp_verify_nonce( $_REQUEST['_panelsnonce'], 'layout-block-sanitize' ) ) {
    11531201            wp_die();
    11541202        }
    1155        
     1203
    11561204        $panels_data = json_decode( wp_unslash( $_POST['panelsData'] ), true );
    11571205        $panels_data['widgets'] = SiteOrigin_Panels_Admin::single()->process_raw_widgets( $panels_data['widgets'], false, true, true );
    11581206        $panels_data = SiteOrigin_Panels_Styles_Admin::single()->sanitize_all( $panels_data );
    1159        
     1207
    11601208        wp_send_json( $panels_data );
    11611209    }
     
    12551303        <?php
    12561304    }
    1257    
     1305
    12581306    public function admin_notices() {
    12591307        global $typenow, $pagenow;
     
    12751323        }
    12761324    }
    1277    
     1325
    12781326    /**
    12791327     * Show Classic Editor for existing PB posts.
     
    12851333     */
    12861334    public function show_classic_editor_for_panels( $use_block_editor, $post_type ) {
    1287        
     1335
    12881336        // For new pages.
    12891337        if ( isset( $_GET['block-editor'] ) ) {
     
    12921340            return false;
    12931341        }
    1294        
     1342
    12951343        $post_types = siteorigin_panels_setting( 'post-types' );
    12961344        global $pagenow;
     
    13111359            $use_block_editor = false;
    13121360        }
    1313        
     1361
    13141362        return $use_block_editor;
    13151363    }
    1316    
     1364
    13171365    /**
    13181366     * This was copied from Gutenberg and slightly modified as a quick way to allow users to create new Page Builder pages
     
    13211369    function add_panels_add_new_button() {
    13221370        global $typenow;
    1323        
     1371
    13241372        if ( 'wp_block' === $typenow ) {
    13251373            ?>
     
    13311379            <?php
    13321380        }
    1333        
     1381
    13341382        if ( ! $this->show_add_new_dropdown_for_type( $typenow ) ) {
    13351383            return;
    13361384        }
    1337        
     1385
    13381386        ?>
    13391387        <style type="text/css">
     
    13411389                display: inline-block;
    13421390            }
    1343            
     1391
    13441392            .split-page-title-action a,
    13451393            .split-page-title-action a:active,
     
    13601408                outline: 0;
    13611409            }
    1362            
     1410
    13631411            .split-page-title-action a:hover,
    13641412            .split-page-title-action .expander:hover:after {
     
    13671415                color: #fff;
    13681416            }
    1369            
     1417
    13701418            .split-page-title-action a:focus,
    13711419            .split-page-title-action .expander:focus:after {
     
    13731421                box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 );
    13741422            }
    1375            
     1423
    13761424            .split-page-title-action .expander:after {
    13771425                content: "\f140";
     
    13861434                <?php echo  is_rtl() ? 'right: -1px;' : 'left: -1px;' ?>
    13871435            }
    1388            
     1436
    13891437            .split-page-title-action .dropdown {
    13901438                display: none;
    13911439            }
    1392            
     1440
    13931441            .split-page-title-action .dropdown.visible {
    13941442                display: block;
     
    13971445                z-index: 1;
    13981446            }
    1399            
     1447
    14001448            .split-page-title-action .dropdown.visible a {
    14011449                display: block;
     
    14041452                <?php echo is_rtl() ? 'padding-left: 9px;' : 'padding-right: 9px;' ?>
    14051453            }
    1406            
     1454
    14071455            .split-page-title-action .expander {
    14081456                outline: none;
     
    14101458                margin-top: 1px;
    14111459            }
    1412        
     1460
    14131461        </style>
    14141462        <script type="text/javascript">
     
    14161464                var buttons = document.getElementsByClassName( 'page-title-action' ),
    14171465                    button = buttons.item( 0 );
    1418                
     1466
    14191467                if ( ! button ) {
    14201468                    return;
    14211469                }
    1422                
     1470
    14231471                var url = button.href;
    14241472                var urlHasParams = ( -1 !== url.indexOf( '?' ) );
    14251473                var panelsUrl = url + ( urlHasParams ? '&' : '?' ) + 'siteorigin-page-builder';
    14261474                var blockEditorUrl = url + ( urlHasParams ? '&' : '?' ) + 'block-editor';
    1427                
     1475
    14281476                var newbutton = '<span id="split-page-title-action" class="split-page-title-action">';
    14291477                newbutton += '<a href="' + url + '">' + button.innerText + '</a>';
     
    14311479                newbutton += '<span class="dropdown"><a href="' + panelsUrl + '"><?php echo esc_html( __( 'SiteOrigin Page Builder', 'siteorigin-panels' ) ); ?></a>';
    14321480                newbutton += '<a href="' + blockEditorUrl + '"><?php echo esc_html( __( 'Block Editor', 'siteorigin-panels' ) ); ?></a></span></span><span class="page-title-action" style="display:none;"></span>';
    1433                
     1481
    14341482                button.insertAdjacentHTML( 'afterend', newbutton );
    14351483                button.parentNode.removeChild( button );
    1436                
     1484
    14371485                var expander = document.getElementById( 'split-page-title-action' ).getElementsByClassName( 'expander' ).item( 0 );
    14381486                var dropdown = expander.parentNode.querySelector( '.dropdown' );
     
    14541502        <?php
    14551503    }
    1456    
     1504
    14571505    private function show_add_new_dropdown_for_type( $post_type ) {
    1458        
     1506
    14591507        $show = in_array( $post_type, siteorigin_panels_setting( 'post-types' ) );
    1460        
     1508
    14611509        // WooCommerce product type doesn't support block editor...
    14621510        $show = $show && ! ( class_exists( 'WooCommerce' ) && $post_type == 'product' );
    1463        
     1511
    14641512        if ( class_exists( 'SiteOrigin_Premium_Plugin_Cpt_Builder' ) ) {
    14651513            $show = $show && $post_type != SiteOrigin_Premium_Plugin_Cpt_Builder::POST_TYPE;
     
    14681516            $show = $show && ! isset( $so_custom_types[ $post_type ] );
    14691517        }
    1470        
     1518
    14711519        return apply_filters( 'so_panels_show_add_new_dropdown_for_type', $show, $post_type );
    14721520    }
    1473    
     1521
    14741522    public function add_panels_post_state( $post_states, $post ) {
    14751523        $panels_data = get_post_meta( $post->ID, 'panels_data', true );
    1476        
     1524
    14771525        if ( ! empty( $panels_data ) ) {
    14781526            $post_states[] = __( 'SiteOrigin Page Builder', 'siteorigin-panels' );
    14791527        }
    1480        
     1528
    14811529        return $post_states;
    14821530    }
  • siteorigin-panels/trunk/inc/css-builder.php

    r2141880 r2316661  
    3939        $attribute_string = implode( ';', $attribute_string );
    4040
    41         // Add everything we need to the CSS selector
    42         if ( empty( $this->css[ $resolution ] ) ) {
    43             $this->css[ $resolution ] = array();
    44         }
    45         if ( empty( $this->css[ $resolution ][ $attribute_string ] ) ) {
    46             $this->css[ $resolution ][ $attribute_string ] = array();
    47         }
    48         $this->css[ $resolution ][ $attribute_string ][] = $selector;
     41        if ( ! empty( $attribute_string ) ) {
     42            // Add everything we need to the CSS selector
     43            if ( empty( $this->css[ $resolution ] ) ) {
     44                $this->css[ $resolution ] = array();
     45            }
     46            if ( empty( $this->css[ $resolution ][ $attribute_string ] ) ) {
     47                $this->css[ $resolution ][ $attribute_string ] = array();
     48            }
     49           
     50            $this->css[ $resolution ][ $attribute_string ][] = $selector;
     51        }
    4952    }
    5053
  • siteorigin-panels/trunk/inc/styles.php

    r2161603 r2316661  
    9595
    9696        $fields[ $id . '_css' ] = array(
    97             'name'        => __( 'CSS Styles', 'siteorigin-panels' ),
     97            'name'        => __( 'CSS Declarations', 'siteorigin-panels' ),
    9898            'type'        => 'code',
    9999            'group'       => 'attributes',
    100             'description' => __( 'One style attribute per line.', 'siteorigin-panels' ),
     100            'description' => __( 'One declaration per line.', 'siteorigin-panels' ),
    101101            'priority'    => 10,
    102102        );
    103103
    104104        $fields[ 'mobile_css' ] = array(
    105             'name'        => __( 'Mobile CSS Styles', 'siteorigin-panels' ),
     105            'name'        => __( 'Mobile CSS Declarations', 'siteorigin-panels' ),
    106106            'type'        => 'code',
    107107            'group'       => 'attributes',
    108             'description' => __( 'CSS applied when in mobile view.', 'siteorigin-panels' ),
     108            'description' => __( 'CSS declarations applied when in mobile view.', 'siteorigin-panels' ),
    109109            'priority'    => 11,
    110110        );
  • siteorigin-panels/trunk/js/yoast-compat.js

    r2141880 r2316661  
    1 /* global jQuery, YoastSEO */
     1/* global jQuery, YoastSEO, _, panelsOptions */
    22
    33jQuery(function($){
     
    88    }
    99
    10     var decodeEntities = (function() {
    11         // this prevents any overhead from creating the object each time
    12         var element = document.createElement('div');
    13 
    14         function decodeHTMLEntities (str) {
    15             if(str && typeof str === 'string') {
    16                 // strip script/html tags
    17                 str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
    18                 str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
    19                 element.innerHTML = str;
    20                 str = element.textContent;
    21                 element.textContent = '';
    22             }
    23 
    24             return str;
    25         }
    26 
    27         return decodeHTMLEntities;
    28     })();
    29 
    3010    var SiteOriginYoastCompat = function() {
    3111        YoastSEO.app.registerPlugin( 'siteOriginYoastCompat', { status: 'ready' } );
     
    3414
    3515    SiteOriginYoastCompat.prototype.contentModification = function(data) {
    36         var re = new RegExp( panelsOptions.siteoriginWidgetRegex , "i" );
    37         var $data = $( '<div>' + data + '</div>' );
     16        if(
     17            typeof window.soPanelsBuilderView !== 'undefined' &&
     18            window.soPanelsBuilderView.contentPreview
     19        ) {
     20            var $data = $( window.soPanelsBuilderView.contentPreview );
    3821
    39         if( $data.find('.so-panel.widget').length === 0 ) {
    40             // Skip this for non Page builder pages
    41             return data;
     22            if( $data.find('.so-panel.widget').length === 0 ) {
     23                // Skip this for empty pages
     24                return data;
     25            }
     26
     27            // Remove style tags created by Widgets Bundle
     28            $data.find('style').remove();
     29
     30            var whitelist = [
     31                'p', 'a', 'img', 'caption', 'br',
     32                'blockquote', 'cite',
     33                'em', 'strong', 'i', 'b',
     34                'q',
     35                'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
     36                'ul', 'ol', 'li',
     37                'table', 'tr', 'th', 'td'
     38            ].join(',');
     39
     40            $data.find("*").not(whitelist).each(function() {
     41                var content = $(this).contents();
     42                $(this).replaceWith(content);
     43            });
     44
     45            data = $data.html();
    4246        }
    4347
    44         $data.find('.so-panel.widget').each(function(i, el) {
    45            
    46             var $widget = $(el);
    47             // Style wrappers prevent us from matching the widget shortcode correctly.
    48             if ( $widget.find( '> .panel-widget-style' ).length > 0 ) {
    49                 $widget = $widget.find( '> .panel-widget-style' );
    50             }
    51             var match = re.exec( $widget.html() );
    52 
    53             try{
    54                 if( ! _.isNull( match ) && $widget.html().replace( re, '' ).trim() === '' ) {
    55                     var classMatch = /class="(.*?)"/.exec(match[3]),
    56                         dataInput = jQuery(match[5]),
    57                         data = JSON.parse(decodeEntities(dataInput.val())),
    58                         widgetInstance = data.instance,
    59                         newHTML = '';
    60 
    61                     if( ! _.isNull(widgetInstance.title) ) {
    62                         newHTML += '<h3>' + widgetInstance.title + '</h3>';
    63                     }
    64 
    65                     if( ! _.isNull( classMatch ) ) {
    66                         var widgetClass = classMatch[1];
    67                         switch( widgetClass ) {
    68                             case 'SiteOrigin_Widget_Image_Widget':
    69                                 // We want a direct assignment for the SO Image Widget to get rid of the title
    70                                 newHTML = $('<img/>').attr({
    71                                     'src': '#' + widgetInstance.image,
    72                                     'srcset': '',
    73                                     'alt': widgetInstance.alt,
    74                                     'title': widgetInstance.title,
    75                                 }).prop('outerHTML');
    76                                 break;
    77 
    78                             case 'WP_Widget_Media_Image':
    79                                 newHTML = $('<img/>').attr({
    80                                     'src': '#' + widgetInstance.attachment_id,
    81                                     'srcset': '',
    82                                     'alt': widgetInstance.alt,
    83                                     'title': widgetInstance.image_title,
    84                                 }).prop('outerHTML');
    85                                 break;
    86 
    87                             case 'SiteOrigin_Widgets_ImageGrid_Widget':
    88                             case 'SiteOrigin_Widget_Simple_Masonry_Widget':
    89                                 newHTML = $( '<div/>' );
    90                                 var imgItems = widgetClass === 'SiteOrigin_Widgets_ImageGrid_Widget' ? widgetInstance.images : widgetInstance.items;
    91                                 for ( var i = 0; i < imgItems.length; i++ ) {
    92                                     var imgItem = imgItems[ i ];
    93                                     var itemHTML = $('<img/>').attr({
    94                                         'src': '#' + imgItem.image,
    95                                         'srcset': '',
    96                                         'alt': ( imgItem.hasOwnProperty( 'alt' ) ? imgItem.alt : imgItem.title ),
    97                                         'title': imgItem.title,
    98                                     });
    99 
    100                                     newHTML.append( itemHTML )
    101                                 }
    102                                 newHTML = newHTML.prop( 'outerHTML' );
    103                                 break;
    104 
    105                             case 'SiteOrigin_Widget_Accordion_Widget':
    106                             case 'SiteOrigin_Widget_Tabs_Widget':
    107                                 var contentItems = widgetClass === 'SiteOrigin_Widget_Accordion_Widget' ? widgetInstance.panels : widgetInstance.tabs;
    108                                 newHTML = $( '<div/>' );
    109                                 for ( var i = 0; i < contentItems.length; i++ ) {
    110                                     var item = contentItems[ i ];
    111                                     if ( item.content_type !== 'text' ) {
    112                                         continue;
    113                                     }
    114                                    
    115                                     newHTML.append( '<h3>' + item.title + '</h3>' );
    116                                     newHTML.append( '<div>' + item.content_text + '</div>')
    117                                 }
    118                                 newHTML = newHTML.prop( 'outerHTML' );
    119                                 break;
    120                             case 'SiteOrigin_Widget_Button_Widget':
    121                                 var hrefSeparator = widgetInstance.url.includes('://') ? '' : '#';
    122                                 newHTML = $( '<a>' + widgetInstance.text + '</a>' ).attr({
    123                                     'href': hrefSeparator + widgetInstance.url,
    124                                 }).prop('outerHTML');
    125                                 break;
    126                         }
    127                     }
    128 
    129                     $widget.html(newHTML);
    130                 }
    131             }
    132             catch(e) {
    133                 // If there was an error, just clear the widget content.
    134                 $widget.html('');
    135             }
    136 
    137         });
    138         return $data.html();
     48        return data;
    13949    };
    14050
  • siteorigin-panels/trunk/js/yoast-compat.min.js

    r2278148 r2316661  
    1 jQuery((function(t){if(void 0!==YoastSEO.app){var e,i=(e=document.createElement("div"),function(t){return t&&"string"==typeof t&&(t=(t=t.replace(/<script[^>]*>([\S\s]*?)<\/script>/gim,"")).replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gim,""),e.innerHTML=t,t=e.textContent,e.textContent=""),t}),a=function(){YoastSEO.app.registerPlugin("siteOriginYoastCompat",{status:"ready"}),YoastSEO.app.registerModification("content",this.contentModification,"siteOriginYoastCompat",5)};a.prototype.contentModification=function(e){var a=new RegExp(panelsOptions.siteoriginWidgetRegex,"i"),r=t("<div>"+e+"</div>");return 0===r.find(".so-panel.widget").length?e:(r.find(".so-panel.widget").each((function(e,r){var n=t(r);n.find("> .panel-widget-style").length>0&&(n=n.find("> .panel-widget-style"));var s=a.exec(n.html());try{if(!_.isNull(s)&&""===n.html().replace(a,"").trim()){var g=/class="(.*?)"/.exec(s[3]),o=jQuery(s[5]),l=JSON.parse(i(o.val())).instance,d="";if(_.isNull(l.title)||(d+="<h3>"+l.title+"</h3>"),!_.isNull(g)){var c=g[1];switch(c){case"SiteOrigin_Widget_Image_Widget":d=t("<img/>").attr({src:"#"+l.image,srcset:"",alt:l.alt,title:l.title}).prop("outerHTML");break;case"WP_Widget_Media_Image":d=t("<img/>").attr({src:"#"+l.attachment_id,srcset:"",alt:l.alt,title:l.image_title}).prop("outerHTML");break;case"SiteOrigin_Widgets_ImageGrid_Widget":case"SiteOrigin_Widget_Simple_Masonry_Widget":d=t("<div/>");var p="SiteOrigin_Widgets_ImageGrid_Widget"===c?l.images:l.items;for(e=0;e<p.length;e++){var m=p[e],u=t("<img/>").attr({src:"#"+m.image,srcset:"",alt:m.hasOwnProperty("alt")?m.alt:m.title,title:m.title});d.append(u)}d=d.prop("outerHTML");break;case"SiteOrigin_Widget_Accordion_Widget":case"SiteOrigin_Widget_Tabs_Widget":var h="SiteOrigin_Widget_Accordion_Widget"===c?l.panels:l.tabs;d=t("<div/>");for(e=0;e<h.length;e++){var v=h[e];"text"===v.content_type&&(d.append("<h3>"+v.title+"</h3>"),d.append("<div>"+v.content_text+"</div>"))}d=d.prop("outerHTML");break;case"SiteOrigin_Widget_Button_Widget":var f=l.url.includes("://")?"":"#";d=t("<a>"+l.text+"</a>").attr({href:f+l.url}).prop("outerHTML")}}n.html(d)}}catch(t){n.html("")}})),r.html())},new a}}));
     1jQuery((function(t){if(void 0!==YoastSEO.app){var i=function(){YoastSEO.app.registerPlugin("siteOriginYoastCompat",{status:"ready"}),YoastSEO.app.registerModification("content",this.contentModification,"siteOriginYoastCompat",5)};i.prototype.contentModification=function(i){if(void 0!==window.soPanelsBuilderView&&window.soPanelsBuilderView.contentPreview){var e=t(window.soPanelsBuilderView.contentPreview);if(0===e.find(".so-panel.widget").length)return i;e.find("style").remove();var n=["p","a","img","caption","br","blockquote","cite","em","strong","i","b","q","h1","h2","h3","h4","h5","h6","ul","ol","li","table","tr","th","td"].join(",");e.find("*").not(n).each((function(){var i=t(this).contents();t(this).replaceWith(i)})),i=e.html()}return i},new i}}));
  • siteorigin-panels/trunk/lang/siteorigin-panels.pot

    r2298584 r2316661  
    7777msgstr ""
    7878
    79 #: inc/admin-dashboard.php:95, inc/admin.php:161
     79#: inc/admin-dashboard.php:95, inc/admin.php:162
    8080msgid "Support Forum"
    8181msgstr ""
     
    154154msgstr ""
    155155
    156 #: inc/admin.php:164, tpl/js-templates.php:44
     156#: inc/admin.php:165, tpl/js-templates.php:44
    157157msgid "Addons"
    158158msgstr ""
    159159
    160 #: inc/admin.php:178, inc/admin.php:574, inc/admin.php:1176, inc/admin.php:1181, inc/settings.php:199, tpl/js-templates.php:197
     160#: inc/admin.php:179, inc/admin.php:575, inc/admin.php:1224, inc/admin.php:1229, inc/settings.php:199, tpl/js-templates.php:197
    161161msgid "Page Builder"
    162162msgstr ""
    163163
    164 #: inc/admin.php:330
     164#: inc/admin.php:331
    165165msgid "All Widgets"
    166166msgstr ""
    167167
    168 #: inc/admin.php:357
     168#: inc/admin.php:358
    169169msgid "Missing Widget"
    170170msgstr ""
    171171
    172 #: inc/admin.php:358
     172#: inc/admin.php:359
    173173msgid "Page Builder doesn't know about this widget."
    174174msgstr ""
    175175
    176176#. translators: Number of seconds since
    177 #: inc/admin.php:362
     177#: inc/admin.php:363
    178178msgid "%d seconds"
    179179msgstr ""
    180180
    181181#. translators: Number of minutes since
    182 #: inc/admin.php:364
     182#: inc/admin.php:365
    183183msgid "%d minutes"
    184184msgstr ""
    185185
    186186#. translators: Number of hours since
    187 #: inc/admin.php:366
     187#: inc/admin.php:367
    188188msgid "%d hours"
    189189msgstr ""
    190190
    191191#. translators: A single second since
    192 #: inc/admin.php:369
     192#: inc/admin.php:370
    193193msgid "%d second"
    194194msgstr ""
    195195
    196196#. translators: A single minute since
    197 #: inc/admin.php:371
     197#: inc/admin.php:372
    198198msgid "%d minute"
    199199msgstr ""
    200200
    201201#. translators: A single hour since
    202 #: inc/admin.php:373
     202#: inc/admin.php:374
    203203msgid "%d hour"
    204204msgstr ""
    205205
    206206#. translators: Time ago - eg. "1 minute before".
    207 #: inc/admin.php:376
     207#: inc/admin.php:377
    208208msgid "%s before"
    209209msgstr ""
    210210
    211 #: inc/admin.php:377
     211#: inc/admin.php:378
    212212msgid "Now"
    213213msgstr ""
    214214
    215 #: inc/admin.php:381
     215#: inc/admin.php:382
    216216msgid "Current"
    217217msgstr ""
    218218
    219 #: inc/admin.php:382
     219#: inc/admin.php:383
    220220msgid "Original"
    221221msgstr ""
    222222
    223 #: inc/admin.php:383
     223#: inc/admin.php:384
    224224msgid "Version restored"
    225225msgstr ""
    226226
    227 #: inc/admin.php:384
     227#: inc/admin.php:385
    228228msgid "Converted to editor"
    229229msgstr ""
    230230
    231231#. translators: Message displayed in the history when a widget is deleted
    232 #: inc/admin.php:388
     232#: inc/admin.php:389
    233233msgid "Widget deleted"
    234234msgstr ""
    235235
    236236#. translators: Message displayed in the history when a widget is added
    237 #: inc/admin.php:390
     237#: inc/admin.php:391
    238238msgid "Widget added"
    239239msgstr ""
    240240
    241241#. translators: Message displayed in the history when a widget is edited
    242 #: inc/admin.php:392
     242#: inc/admin.php:393
    243243msgid "Widget edited"
    244244msgstr ""
    245245
    246246#. translators: Message displayed in the history when a widget is duplicated
    247 #: inc/admin.php:394
     247#: inc/admin.php:395
    248248msgid "Widget duplicated"
    249249msgstr ""
    250250
    251251#. translators: Message displayed in the history when a widget position is changed
    252 #: inc/admin.php:396
     252#: inc/admin.php:397
    253253msgid "Widget moved"
    254254msgstr ""
    255255
    256256#. translators: Message displayed in the history when a row is deleted
    257 #: inc/admin.php:400
     257#: inc/admin.php:401
    258258msgid "Row deleted"
    259259msgstr ""
    260260
    261261#. translators: Message displayed in the history when a row is added
    262 #: inc/admin.php:402
     262#: inc/admin.php:403
    263263msgid "Row added"
    264264msgstr ""
    265265
    266266#. translators: Message displayed in the history when a row is edited
    267 #: inc/admin.php:404
     267#: inc/admin.php:405
    268268msgid "Row edited"
    269269msgstr ""
    270270
    271271#. translators: Message displayed in the history when a row position is changed
    272 #: inc/admin.php:406
     272#: inc/admin.php:407
    273273msgid "Row moved"
    274274msgstr ""
    275275
    276276#. translators: Message displayed in the history when a row is duplicated
    277 #: inc/admin.php:408
     277#: inc/admin.php:409
    278278msgid "Row duplicated"
    279279msgstr ""
    280280
    281281#. translators: Message displayed in the history when a row is pasted
    282 #: inc/admin.php:410
     282#: inc/admin.php:411
    283283msgid "Row pasted"
    284284msgstr ""
    285285
    286 #: inc/admin.php:413
     286#: inc/admin.php:414
    287287msgid "Cell resized"
    288288msgstr ""
    289289
    290 #: inc/admin.php:416
     290#: inc/admin.php:417
    291291msgid "Prebuilt layout loaded"
    292292msgstr ""
    293293
    294 #: inc/admin.php:420
     294#: inc/admin.php:421
    295295msgid "Loading prebuilt layout"
    296296msgstr ""
    297297
    298 #: inc/admin.php:421
     298#: inc/admin.php:422
    299299msgid "Would you like to copy this editor's existing content to Page Builder?"
    300300msgstr ""
    301301
    302 #: inc/admin.php:422
     302#: inc/admin.php:423
    303303msgid "Would you like to clear your Page Builder content and revert to using the standard visual editor?"
    304304msgstr ""
    305305
    306306#. translators: This is the title for a widget called "Layout Builder"
    307 #: inc/admin.php:424
     307#: inc/admin.php:425
    308308msgid "Layout Builder Widget"
    309309msgstr ""
    310310
    311311#. translators: A standard confirmation message
    312 #: inc/admin.php:426, tpl/js-templates.php:97, tpl/js-templates.php:422
     312#: inc/admin.php:427, tpl/js-templates.php:97, tpl/js-templates.php:422
    313313msgid "Are you sure?"
    314314msgstr ""
    315315
    316316#. translators: When a layout file is ready to be inserted. %s is the filename.
    317 #: inc/admin.php:428
     317#: inc/admin.php:429
    318318msgid "%s is ready to insert."
    319319msgstr ""
    320320
    321 #: inc/admin.php:432
     321#: inc/admin.php:433
    322322msgid "Add Widget Below"
    323323msgstr ""
    324324
    325 #: inc/admin.php:433
     325#: inc/admin.php:434
    326326msgid "Add Widget to Cell"
    327327msgstr ""
    328328
    329 #: inc/admin.php:434, tpl/js-templates.php:224
     329#: inc/admin.php:435, tpl/js-templates.php:224
    330330msgid "Search Widgets"
    331331msgstr ""
    332332
    333 #: inc/admin.php:436, tpl/js-templates.php:17, tpl/js-templates.php:19
     333#: inc/admin.php:437, tpl/js-templates.php:17, tpl/js-templates.php:19
    334334msgid "Add Row"
    335335msgstr ""
    336336
    337 #: inc/admin.php:437
     337#: inc/admin.php:438
    338338msgid "Column"
    339339msgstr ""
    340340
    341 #: inc/admin.php:439
     341#: inc/admin.php:440
    342342msgid "Cell Actions"
    343343msgstr ""
    344344
    345 #: inc/admin.php:440
     345#: inc/admin.php:441
    346346msgid "Paste Widget"
    347347msgstr ""
    348348
    349 #: inc/admin.php:442
     349#: inc/admin.php:443
    350350msgid "Widget Actions"
    351351msgstr ""
    352352
    353 #: inc/admin.php:443
     353#: inc/admin.php:444
    354354msgid "Edit Widget"
    355355msgstr ""
    356356
    357 #: inc/admin.php:444
     357#: inc/admin.php:445
    358358msgid "Duplicate Widget"
    359359msgstr ""
    360360
    361 #: inc/admin.php:445
     361#: inc/admin.php:446
    362362msgid "Delete Widget"
    363363msgstr ""
    364364
    365 #: inc/admin.php:446
     365#: inc/admin.php:447
    366366msgid "Copy Widget"
    367367msgstr ""
    368368
    369 #: inc/admin.php:447
     369#: inc/admin.php:448
    370370msgid "Paste Widget Below"
    371371msgstr ""
    372372
    373 #: inc/admin.php:449
     373#: inc/admin.php:450
    374374msgid "Row Actions"
    375375msgstr ""
    376376
    377 #: inc/admin.php:450, tpl/js-templates.php:95
     377#: inc/admin.php:451, tpl/js-templates.php:95
    378378msgid "Edit Row"
    379379msgstr ""
    380380
    381 #: inc/admin.php:451, tpl/js-templates.php:96
     381#: inc/admin.php:452, tpl/js-templates.php:96
    382382msgid "Duplicate Row"
    383383msgstr ""
    384384
    385 #: inc/admin.php:452, tpl/js-templates.php:97
     385#: inc/admin.php:453, tpl/js-templates.php:97
    386386msgid "Delete Row"
    387387msgstr ""
    388388
    389 #: inc/admin.php:453
     389#: inc/admin.php:454
    390390msgid "Copy Row"
    391391msgstr ""
    392392
    393 #: inc/admin.php:454
     393#: inc/admin.php:455
    394394msgid "Paste Row"
    395395msgstr ""
    396396
    397 #: inc/admin.php:456
     397#: inc/admin.php:457
    398398msgid "Draft"
    399399msgstr ""
    400400
    401 #: inc/admin.php:457
     401#: inc/admin.php:458
    402402msgid "Untitled"
    403403msgstr ""
    404404
    405 #: inc/admin.php:459
     405#: inc/admin.php:460
    406406msgid "New Row"
    407407msgstr ""
    408408
    409 #: inc/admin.php:460, inc/admin.php:468, inc/styles.php:189, tpl/js-templates.php:62
     409#: inc/admin.php:461, inc/admin.php:469, inc/styles.php:189, tpl/js-templates.php:62
    410410msgid "Row"
    411411msgstr ""
    412412
    413 #: inc/admin.php:463
     413#: inc/admin.php:464
    414414msgid "Hmmm... Adding layout elements is not enabled. Please check if Page Builder has been configured to allow adding elements."
    415415msgstr ""
    416416
    417 #: inc/admin.php:464
     417#: inc/admin.php:465
    418418msgid "Add a {{%= items[0] %}} to get started."
    419419msgstr ""
    420420
    421 #: inc/admin.php:465
     421#: inc/admin.php:466
    422422msgid "Add a {{%= items[0] %}} or {{%= items[1] %}} to get started."
    423423msgstr ""
    424424
    425 #: inc/admin.php:466
     425#: inc/admin.php:467
    426426msgid "Add a {{%= items[0] %}}, {{%= items[1] %}} or {{%= items[2] %}} to get started."
    427427msgstr ""
    428428
    429 #: inc/admin.php:467, inc/styles.php:341, tpl/js-templates.php:61
     429#: inc/admin.php:468, inc/styles.php:341, tpl/js-templates.php:61
    430430msgid "Widget"
    431431msgstr ""
    432432
    433 #: inc/admin.php:469, tpl/js-templates.php:63
     433#: inc/admin.php:470, tpl/js-templates.php:63
    434434msgid "Prebuilt Layout"
    435435msgstr ""
    436436
    437 #: inc/admin.php:471
     437#: inc/admin.php:472
    438438msgid "Read our %s if you need help."
    439439msgstr ""
    440440
    441 #: inc/admin.php:472, tpl/js-templates.php:64
     441#: inc/admin.php:473, tpl/js-templates.php:64
    442442msgid "documentation"
    443443msgstr ""
    444444
    445 #: inc/admin.php:481
     445#: inc/admin.php:482
    446446msgid "Page Builder layouts"
    447447msgstr ""
    448448
    449 #: inc/admin.php:482
     449#: inc/admin.php:483
    450450msgid "Error uploading or importing file."
    451451msgstr ""
    452452
    453 #: inc/admin.php:489
     453#: inc/admin.php:490
    454454msgid "Unknown error. Failed to load the form. Please check your internet connection, contact your web site administrator, or try again later."
    455455msgstr ""
    456456
    457457#. translators: This is the default name given to a user's home page
    458 #: inc/admin.php:657, inc/home.php:26
     458#: inc/admin.php:658, inc/home.php:26
    459459msgid "Home Page"
    460460msgstr ""
    461461
    462 #: inc/admin.php:758
     462#: inc/admin.php:759
    463463msgid "Untitled Widget"
    464464msgstr ""
    465465
    466 #: inc/admin.php:938
     466#: inc/admin.php:939
    467467msgid "You need to install 1{%1$s} to use the widget 2{%2$s}."
    468468msgstr ""
    469469
    470 #: inc/admin.php:944
     470#: inc/admin.php:945
    471471msgid "Save and reload this page to start using the widget after you've installed it."
    472472msgstr ""
    473473
    474 #: inc/admin.php:960
     474#: inc/admin.php:961
    475475msgid "The widget 1{%1$s} is not available. Please try locate and install the missing plugin. Post on the 2{support forums} if you need help."
    476476msgstr ""
    477477
    478 #: inc/admin.php:1079, inc/styles-admin.php:23
     478#: inc/admin.php:1127, inc/styles-admin.php:23
    479479msgid "The supplied nonce is invalid."
    480480msgstr ""
    481481
    482 #: inc/admin.php:1080, inc/styles-admin.php:24
     482#: inc/admin.php:1128, inc/styles-admin.php:24
    483483msgid "Invalid nonce."
    484484msgstr ""
    485485
    486 #: inc/admin.php:1086
     486#: inc/admin.php:1134
    487487msgid "Please specify the type of widget form to be rendered."
    488488msgstr ""
    489489
    490 #: inc/admin.php:1087
     490#: inc/admin.php:1135
    491491msgid "Missing widget type."
    492492msgstr ""
    493493
    494 #: inc/admin.php:1194
     494#: inc/admin.php:1242
    495495msgid "%s Widget"
    496496msgid_plural "%s Widgets"
     
    498498msgstr[1] ""
    499499
    500 #: inc/admin.php:1237
     500#: inc/admin.php:1285
    501501msgid "Get a lightbox addon for SiteOrigin widgets"
    502502msgstr ""
    503503
    504 #: inc/admin.php:1241
     504#: inc/admin.php:1289
    505505msgid "Get the row, cell and widget animations addon"
    506506msgstr ""
    507507
    508 #: inc/admin.php:1245
     508#: inc/admin.php:1293
    509509msgid "Get premium email support for SiteOrigin Page Builder"
    510510msgstr ""
    511511
    512 #: inc/admin.php:1430
     512#: inc/admin.php:1478
    513513msgid "Toggle editor selection menu"
    514514msgstr ""
    515515
    516 #: inc/admin.php:1431, inc/admin.php:1478, inc/settings.php:199, settings/tpl/settings.php:9
     516#: inc/admin.php:1479, inc/admin.php:1526, inc/settings.php:199, settings/tpl/settings.php:9
    517517msgid "SiteOrigin Page Builder"
    518518msgstr ""
    519519
    520 #: inc/admin.php:1432
     520#: inc/admin.php:1480
    521521msgid "Block Editor"
    522522msgstr ""
     
    859859
    860860#: inc/styles.php:97
    861 msgid "CSS Styles"
     861msgid "CSS Declarations"
    862862msgstr ""
    863863
    864864#: inc/styles.php:100
    865 msgid "One style attribute per line."
     865msgid "One declaration per line."
    866866msgstr ""
    867867
    868868#: inc/styles.php:105
    869 msgid "Mobile CSS Styles"
     869msgid "Mobile CSS Declarations"
    870870msgstr ""
    871871
    872872#: inc/styles.php:108
    873 msgid "CSS applied when in mobile view."
     873msgid "CSS declarations applied when in mobile view."
    874874msgstr ""
    875875
  • siteorigin-panels/trunk/readme.txt

    r2307143 r2316661  
    33Requires at least: 4.7
    44Tested up to: 5.5
    5 Stable tag: 2.10.17
    6 Build time: 2020-05-18T13:30:18+02:00
     5Stable tag: 2.11.0
     6Build time: 2020-06-02T16:27:51+02:00
    77License: GPLv3
    88License URI: http://www.gnu.org/licenses/gpl.html
     
    9696
    9797== Changelog ==
     98
     99= 2.11.0 - 02 June 2020 =
     100* Live Editor: Ensured device viewing mode retained after update.
     101* Live Editor: Improved device preview transition.
     102* Legacy Layout: Detect IE 11 as legacy browser.
     103* Yoast SEO: Improved Classic Editor support.
     104* Yoast SEO: Added Block Editor support for the SiteOrigin Layout block.
     105* CSS Builder: Prevented rules without declarations from outputting.
     106* Widget Previews: Prevented boolean values from being used as widget descriptions.
     107* Live Editor: Resolved Chrome bug by setting preview url for iframe.
    98108
    99109= 2.10.17 - 18 May 2020 =
  • siteorigin-panels/trunk/siteorigin-panels.php

    r2307143 r2316661  
    44Plugin URI: https://siteorigin.com/page-builder/
    55Description: A drag and drop, responsive page builder that simplifies building your website.
    6 Version: 2.10.17
     6Version: 2.11.0
    77Author: SiteOrigin
    88Author URI: https://siteorigin.com
     
    1212*/
    1313
    14 define( 'SITEORIGIN_PANELS_VERSION', '2.10.17' );
     14define( 'SITEORIGIN_PANELS_VERSION', '2.11.0' );
    1515if ( ! defined( 'SITEORIGIN_PANELS_JS_SUFFIX' ) ) {
    1616    define( 'SITEORIGIN_PANELS_JS_SUFFIX', '.min' );
    1717}
    1818define( 'SITEORIGIN_PANELS_CSS_SUFFIX', '.min' );
    19 define( 'SITEORIGIN_PANELS_VERSION_SUFFIX', '-21017' );
     19define( 'SITEORIGIN_PANELS_VERSION_SUFFIX', '-2110' );
    2020
    2121require_once plugin_dir_path( __FILE__ ) . 'inc/functions.php';
     
    126126       
    127127        return
    128             // IE lte 10
    129             ( preg_match('/MSIE\s(?P<v>\d+)/i', $agent, $B) && $B['v'] <= 10 ) ||
     128            // IE lte 11
     129            ( preg_match('/Trident\/(?P<v>\d+)/i', $agent, $B) && $B['v'] <= 7 ) ||
    130130            // Chrome lte 25
    131131            ( preg_match('/Chrome\/(?P<v>\d+)/i', $agent, $B) && $B['v'] <= 25 ) ||
Note: See TracChangeset for help on using the changeset viewer.