Version Description
- 12 April 2018 =
- Added action just before rendering widget previews.
- Editor: Removed
unwpautop
. - Editor: Ensure TinyMCE field knows whether to apply
autop
or not. - Editor: Only apply
autop
on display when using HTML editor. - Editor: Prevent
widget_text
filters from runningdo_shortcode
.
Download this release
Release Info
Developer | gpriday |
Plugin | SiteOrigin Widgets Bundle |
Version | 1.11.8 |
Comparing to | |
See all releases |
Code changes from version 1.11.7 to 1.11.8
- base/inc/actions.php +2 -0
- base/inc/fields/js/tinymce-field.js +17 -2
- base/inc/fields/js/tinymce-field.min.js +1 -1
- base/inc/fields/tinymce.class.php +16 -13
- lang/so-widgets-bundle.pot +5 -5
- readme.txt +10 -3
- so-widgets-bundle.php +2 -2
- widgets/editor/editor.php +15 -14
base/inc/actions.php
CHANGED
@@ -31,6 +31,8 @@ function siteorigin_widget_preview_widget_action() {
|
|
31 |
|
32 |
$sowb = SiteOrigin_Widgets_Bundle::single();
|
33 |
$sowb->register_general_scripts();
|
|
|
|
|
34 |
|
35 |
ob_start();
|
36 |
$widget->widget( array(
|
31 |
|
32 |
$sowb = SiteOrigin_Widgets_Bundle::single();
|
33 |
$sowb->register_general_scripts();
|
34 |
+
|
35 |
+
do_action( 'siteorigin_widgets_render_preview_' . $widget->id_base, $widget );
|
36 |
|
37 |
ob_start();
|
38 |
$widget->widget( array(
|
base/inc/fields/js/tinymce-field.js
CHANGED
@@ -9,6 +9,12 @@
|
|
9 |
|
10 |
var $container = $field.find( '.siteorigin-widget-tinymce-container' );
|
11 |
var settings = $container.data( 'editorSettings' );
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
var $textarea = $container.find( 'textarea' );
|
13 |
var id = $textarea.attr( 'id' );
|
14 |
var setupEditor = function ( editor ) {
|
@@ -18,16 +24,24 @@
|
|
18 |
$textarea.trigger( 'change' );
|
19 |
}
|
20 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
};
|
22 |
|
23 |
settings.tinymce = $.extend( {}, settings.tinymce, { selector: '#' + id, setup: setupEditor } );
|
24 |
-
$( document ).
|
25 |
if ( init.selector === settings.tinymce.selector ) {
|
26 |
var mediaButtons = $container.data( 'mediaButtons' );
|
27 |
$field.find( '.wp-editor-tabs' ).before( mediaButtons.html );
|
28 |
}
|
29 |
} );
|
30 |
-
$( document ).
|
31 |
if ( ! $field.find( '.wp-editor-wrap' ).hasClass( settings.selectedEditor + '-active' ) ) {
|
32 |
setTimeout( function () {
|
33 |
window.switchEditors.go( id );
|
@@ -65,6 +79,7 @@
|
|
65 |
editor.setContent(window.switchEditors.wpautop(content));
|
66 |
}
|
67 |
}
|
|
|
68 |
$field.find( '.siteorigin-widget-tinymce-selected-editor' ).val( mode );
|
69 |
} );
|
70 |
|
9 |
|
10 |
var $container = $field.find( '.siteorigin-widget-tinymce-container' );
|
11 |
var settings = $container.data( 'editorSettings' );
|
12 |
+
var $wpautopToggleField;
|
13 |
+
if ( settings.wpautopToggleField ) {
|
14 |
+
var $widgetForm = $container.closest( '.siteorigin-widget-form' );
|
15 |
+
$wpautopToggleField = $widgetForm.find( settings.wpautopToggleField );
|
16 |
+
settings.tinymce.wpautop = $wpautopToggleField.is( ':checked' );
|
17 |
+
}
|
18 |
var $textarea = $container.find( 'textarea' );
|
19 |
var id = $textarea.attr( 'id' );
|
20 |
var setupEditor = function ( editor ) {
|
24 |
$textarea.trigger( 'change' );
|
25 |
}
|
26 |
);
|
27 |
+
if ( $wpautopToggleField ) {
|
28 |
+
$wpautopToggleField.off( 'change' );
|
29 |
+
$wpautopToggleField.on( 'change', function () {
|
30 |
+
wp.editor.remove( id );
|
31 |
+
settings.tinymce.wpautop = $wpautopToggleField.is( ':checked' );
|
32 |
+
wp.editor.initialize( id, settings );
|
33 |
+
} );
|
34 |
+
}
|
35 |
};
|
36 |
|
37 |
settings.tinymce = $.extend( {}, settings.tinymce, { selector: '#' + id, setup: setupEditor } );
|
38 |
+
$( document ).on( 'wp-before-tinymce-init', function ( event, init ) {
|
39 |
if ( init.selector === settings.tinymce.selector ) {
|
40 |
var mediaButtons = $container.data( 'mediaButtons' );
|
41 |
$field.find( '.wp-editor-tabs' ).before( mediaButtons.html );
|
42 |
}
|
43 |
} );
|
44 |
+
$( document ).on( 'tinymce-editor-setup', function () {
|
45 |
if ( ! $field.find( '.wp-editor-wrap' ).hasClass( settings.selectedEditor + '-active' ) ) {
|
46 |
setTimeout( function () {
|
47 |
window.switchEditors.go( id );
|
79 |
editor.setContent(window.switchEditors.wpautop(content));
|
80 |
}
|
81 |
}
|
82 |
+
settings.selectedEditor = mode;
|
83 |
$field.find( '.siteorigin-widget-tinymce-selected-editor' ).val( mode );
|
84 |
} );
|
85 |
|
base/inc/fields/js/tinymce-field.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(i){var e=function(e){if(!e.data("initialized")){var t=e.find(".siteorigin-widget-tinymce-container"),n
|
1 |
+
!function(i){var e=function(e){if(!e.data("initialized")){var t,n=e.find(".siteorigin-widget-tinymce-container"),o=n.data("editorSettings");if(o.wpautopToggleField){var r=n.closest(".siteorigin-widget-form");t=r.find(o.wpautopToggleField),o.tinymce.wpautop=t.is(":checked")}var d=n.find("textarea"),s=d.attr("id"),a=function(i){i.on("change",function(){window.tinymce.get(s).save(),d.trigger("change")}),t&&(t.off("change"),t.on("change",function(){wp.editor.remove(s),o.tinymce.wpautop=t.is(":checked"),wp.editor.initialize(s,o)}))};if(o.tinymce=i.extend({},o.tinymce,{selector:"#"+s,setup:a}),i(document).on("wp-before-tinymce-init",function(i,t){if(t.selector===o.tinymce.selector){var r=n.data("mediaButtons");e.find(".wp-editor-tabs").before(r.html)}}),i(document).on("tinymce-editor-setup",function(){e.find(".wp-editor-wrap").hasClass(o.selectedEditor+"-active")||setTimeout(function(){window.switchEditors.go(s)},10)}),wp.editor.remove(s),d.is(":visible"))wp.editor.initialize(s,o);else var c=setInterval(function(){d.is(":visible")&&(wp.editor.initialize(s,o),clearInterval(c))},500);e.on("click",function(t){var n=i(t.target),r=n.hasClass("switch-tmce")?"tmce":"html";if("tmce"===r){var a=window.tinymce.get(s);if(n.hasClass("wp-switch-editor")&&null!==a){var c=d.val();-1!==c.search("<")&&-1===c.search(">")&&(c=c.replace(/</g,""),d.val(c)),a.setContent(window.switchEditors.wpautop(c))}}o.selectedEditor=r,e.find(".siteorigin-widget-tinymce-selected-editor").val(r)}),e.data("initialized",!0)}};i(document).on("sowsetupformfield",".siteorigin-widget-field-type-tinymce",function(){var t=i(this),n=t.closest(".siteorigin-widget-field-repeater-item-form");n.length>0?n.is(":visible")?e(t):n.on("slideToggleOpenComplete",function(){n.is(":visible")&&(e(t),n.off("slideToggleOpenComplete"))}):e(t)}),i(document).on("sortstop",function(t,n){var o;o=n.item.is(".siteorigin-widget-field-repeater-item")?n.item.find("> .siteorigin-widget-field-repeater-item-form"):n.item.find(".siteorigin-widget-form"),o.find(".siteorigin-widget-field-type-tinymce").each(function(){i(this).data("initialized",null),e(i(this))})})}(jQuery);
|
base/inc/fields/tinymce.class.php
CHANGED
@@ -100,14 +100,6 @@ class SiteOrigin_Widget_Field_TinyMCE extends SiteOrigin_Widget_Field_Text_Input
|
|
100 |
*/
|
101 |
private $wp_version_lt_4_8;
|
102 |
|
103 |
-
public static function unautop( $text ) {
|
104 |
-
$text = str_replace('<p>', '', $text);
|
105 |
-
$text = str_replace(array('<br />', '<br>', '<br/>'), "\n", $text);
|
106 |
-
$text = str_replace('</p>', "\n\n", $text);
|
107 |
-
|
108 |
-
return $text;
|
109 |
-
}
|
110 |
-
|
111 |
protected function get_default_options() {
|
112 |
return array(
|
113 |
'wpautop' => true,
|
@@ -320,9 +312,9 @@ class SiteOrigin_Widget_Field_TinyMCE extends SiteOrigin_Widget_Field_Text_Input
|
|
320 |
}
|
321 |
|
322 |
protected function render_before_field( $value, $instance ) {
|
323 |
-
$
|
324 |
-
if( ! empty( $
|
325 |
-
$this->selected_editor = $
|
326 |
}
|
327 |
else {
|
328 |
$this->selected_editor = $this->default_editor;
|
@@ -496,8 +488,9 @@ class SiteOrigin_Widget_Field_TinyMCE extends SiteOrigin_Widget_Field_Text_Input
|
|
496 |
}
|
497 |
|
498 |
protected function sanitize_field_input( $value, $instance ) {
|
499 |
-
|
500 |
-
|
|
|
501 |
}
|
502 |
if( current_user_can( 'unfiltered_html' ) ) {
|
503 |
$sanitized_value = $value;
|
@@ -517,6 +510,16 @@ class SiteOrigin_Widget_Field_TinyMCE extends SiteOrigin_Widget_Field_Text_Input
|
|
517 |
return $instance;
|
518 |
}
|
519 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
520 |
public function get_selected_editor_field_name( $base_name ) {
|
521 |
$v_name = $base_name;
|
522 |
if( strpos($v_name, '][') !== false ) {
|
100 |
*/
|
101 |
private $wp_version_lt_4_8;
|
102 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
protected function get_default_options() {
|
104 |
return array(
|
105 |
'wpautop' => true,
|
312 |
}
|
313 |
|
314 |
protected function render_before_field( $value, $instance ) {
|
315 |
+
$selected_editor = $this->get_selected_editor( $instance );
|
316 |
+
if( ! empty( $selected_editor ) ) {
|
317 |
+
$this->selected_editor = $selected_editor;
|
318 |
}
|
319 |
else {
|
320 |
$this->selected_editor = $this->default_editor;
|
488 |
}
|
489 |
|
490 |
protected function sanitize_field_input( $value, $instance ) {
|
491 |
+
$selected_editor = $this->get_selected_editor( $instance );
|
492 |
+
if ( in_array( $selected_editor, array( 'tinymce', 'tmce' ) ) && ! empty( $this->wpautop ) ) {
|
493 |
+
$value = wpautop( $value );
|
494 |
}
|
495 |
if( current_user_can( 'unfiltered_html' ) ) {
|
496 |
$sanitized_value = $value;
|
510 |
return $instance;
|
511 |
}
|
512 |
|
513 |
+
public function get_selected_editor( $instance ) {
|
514 |
+
$selected_editor = null;
|
515 |
+
$selected_editor_name = $this->get_selected_editor_field_name( $this->base_name );
|
516 |
+
if( ! empty( $instance[ $selected_editor_name ] ) ) {
|
517 |
+
$selected_editor = $instance[ $selected_editor_name ];
|
518 |
+
}
|
519 |
+
|
520 |
+
return $selected_editor;
|
521 |
+
}
|
522 |
+
|
523 |
public function get_selected_editor_field_name( $base_name ) {
|
524 |
$v_name = $base_name;
|
525 |
if( strpos($v_name, '][') !== false ) {
|
lang/so-widgets-bundle.pot
CHANGED
@@ -69,7 +69,7 @@ msgstr ""
|
|
69 |
msgid "Save"
|
70 |
msgstr ""
|
71 |
|
72 |
-
#: tmp/base/inc/actions.php:19, tmp/base/inc/actions.php:
|
73 |
msgid "Invalid request."
|
74 |
msgstr ""
|
75 |
|
@@ -77,19 +77,19 @@ msgstr ""
|
|
77 |
msgid "Invalid post."
|
78 |
msgstr ""
|
79 |
|
80 |
-
#: tmp/base/inc/actions.php:
|
81 |
msgid "Widget Preview"
|
82 |
msgstr ""
|
83 |
|
84 |
-
#: tmp/base/inc/actions.php:
|
85 |
msgid "Nonce error"
|
86 |
msgstr ""
|
87 |
|
88 |
-
#: tmp/base/inc/actions.php:
|
89 |
msgid "Signature error"
|
90 |
msgstr ""
|
91 |
|
92 |
-
#: tmp/base/inc/actions.php:
|
93 |
msgid "Attachment error"
|
94 |
msgstr ""
|
95 |
|
69 |
msgid "Save"
|
70 |
msgstr ""
|
71 |
|
72 |
+
#: tmp/base/inc/actions.php:19, tmp/base/inc/actions.php:149, tmp/base/inc/actions.php:237, tmp/base/inc/actions.php:309, tmp/base/inc/actions.php:335, tmp/base/inc/actions.php:343, tmp/base/inc/actions.php:525, tmp/base/inc/actions.php:531, tmp/so-widgets-bundle.php:739, tmp/so-widgets-bundle.php:787, tmp/so-widgets-bundle.php:813, tmp/so-widgets-bundle.php:873, tmp/so-widgets-bundle.php:895, tmp/so-widgets-bundle.php:1027, tmp/so-widgets-bundle.php:1049
|
73 |
msgid "Invalid request."
|
74 |
msgstr ""
|
75 |
|
77 |
msgid "Invalid post."
|
78 |
msgstr ""
|
79 |
|
80 |
+
#: tmp/base/inc/actions.php:99, tmp/base/siteorigin-widget.class.php:1273
|
81 |
msgid "Widget Preview"
|
82 |
msgstr ""
|
83 |
|
84 |
+
#: tmp/base/inc/actions.php:421
|
85 |
msgid "Nonce error"
|
86 |
msgstr ""
|
87 |
|
88 |
+
#: tmp/base/inc/actions.php:441
|
89 |
msgid "Signature error"
|
90 |
msgstr ""
|
91 |
|
92 |
+
#: tmp/base/inc/actions.php:493
|
93 |
msgid "Attachment error"
|
94 |
msgstr ""
|
95 |
|
readme.txt
CHANGED
@@ -2,8 +2,8 @@
|
|
2 |
Tags: bundle, widget, button, slider, image, carousel, price table, google maps, tinymce, social links
|
3 |
Requires at least: 4.2
|
4 |
Tested up to: 4.9.1
|
5 |
-
Stable tag: 1.11.
|
6 |
-
Build time: 2018-
|
7 |
License: GPLv3 or later
|
8 |
Contributors: gpriday, braam-genis
|
9 |
Donate link: https://siteorigin.com/downloads/contribution/
|
@@ -47,7 +47,7 @@ Once you enable a widget, you'll be able to use it anywhere standard widgets are
|
|
47 |
|
48 |
== Documentation ==
|
49 |
|
50 |
-
[Documentation](https://siteorigin.com/
|
51 |
|
52 |
== Support ==
|
53 |
|
@@ -65,6 +65,13 @@ The SiteOrigin Widgets Bundle is the perfect platform to build widgets for your
|
|
65 |
|
66 |
== Changelog ==
|
67 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
= 1.11.7 - 23 March 2018 =
|
69 |
* Image: Add title alignment setting.
|
70 |
* Button: Add max-width to ensure buttons are responsive.
|
2 |
Tags: bundle, widget, button, slider, image, carousel, price table, google maps, tinymce, social links
|
3 |
Requires at least: 4.2
|
4 |
Tested up to: 4.9.1
|
5 |
+
Stable tag: 1.11.8
|
6 |
+
Build time: 2018-04-12T16:11:39+02:00
|
7 |
License: GPLv3 or later
|
8 |
Contributors: gpriday, braam-genis
|
9 |
Donate link: https://siteorigin.com/downloads/contribution/
|
47 |
|
48 |
== Documentation ==
|
49 |
|
50 |
+
[Documentation](https://siteorigin.com/widgets-bundle/getting-started/) is available on SiteOrigin.
|
51 |
|
52 |
== Support ==
|
53 |
|
65 |
|
66 |
== Changelog ==
|
67 |
|
68 |
+
= 1.11.8 - 12 April 2018 =
|
69 |
+
* Added action just before rendering widget previews.
|
70 |
+
* Editor: Removed `unwpautop`.
|
71 |
+
* Editor: Ensure TinyMCE field knows whether to apply `autop` or not.
|
72 |
+
* Editor: Only apply `autop` on display when using HTML editor.
|
73 |
+
* Editor: Prevent `widget_text` filters from running `do_shortcode`.
|
74 |
+
|
75 |
= 1.11.7 - 23 March 2018 =
|
76 |
* Image: Add title alignment setting.
|
77 |
* Button: Add max-width to ensure buttons are responsive.
|
so-widgets-bundle.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/*
|
3 |
Plugin Name: SiteOrigin Widgets Bundle
|
4 |
Description: A collection of all widgets, neatly bundled into a single plugin. It's also a framework to code your own widgets on top of.
|
5 |
-
Version: 1.11.
|
6 |
Text Domain: so-widgets-bundle
|
7 |
Domain Path: /lang
|
8 |
Author: SiteOrigin
|
@@ -12,7 +12,7 @@ License: GPL3
|
|
12 |
License URI: https://www.gnu.org/licenses/gpl-3.0.txt
|
13 |
*/
|
14 |
|
15 |
-
define('SOW_BUNDLE_VERSION', '1.11.
|
16 |
define('SOW_BUNDLE_BASE_FILE', __FILE__);
|
17 |
|
18 |
// Allow JS suffix to be pre-set
|
2 |
/*
|
3 |
Plugin Name: SiteOrigin Widgets Bundle
|
4 |
Description: A collection of all widgets, neatly bundled into a single plugin. It's also a framework to code your own widgets on top of.
|
5 |
+
Version: 1.11.8
|
6 |
Text Domain: so-widgets-bundle
|
7 |
Domain Path: /lang
|
8 |
Author: SiteOrigin
|
12 |
License URI: https://www.gnu.org/licenses/gpl-3.0.txt
|
13 |
*/
|
14 |
|
15 |
+
define('SOW_BUNDLE_VERSION', '1.11.8');
|
16 |
define('SOW_BUNDLE_BASE_FILE', __FILE__);
|
17 |
|
18 |
// Allow JS suffix to be pre-set
|
widgets/editor/editor.php
CHANGED
@@ -34,7 +34,7 @@ class SiteOrigin_Widget_Editor_Widget extends SiteOrigin_Widget {
|
|
34 |
'text' => array(
|
35 |
'type' => 'tinymce',
|
36 |
'rows' => 20,
|
37 |
-
'
|
38 |
),
|
39 |
'autop' => array(
|
40 |
'type' => 'checkbox',
|
@@ -54,27 +54,17 @@ class SiteOrigin_Widget_Editor_Widget extends SiteOrigin_Widget {
|
|
54 |
);
|
55 |
}
|
56 |
|
57 |
-
function unwpautop($string) {
|
58 |
-
$string = str_replace("<p>", "", $string);
|
59 |
-
$string = str_replace(array("<br />", "<br>", "<br/>"), "\n", $string);
|
60 |
-
$string = str_replace("</p>", "\n\n", $string);
|
61 |
-
|
62 |
-
return $string;
|
63 |
-
}
|
64 |
-
|
65 |
public function get_template_variables( $instance, $args ) {
|
66 |
$instance = wp_parse_args(
|
67 |
$instance,
|
68 |
array( 'text' => '' )
|
69 |
-
|
70 |
|
71 |
if (
|
72 |
// Only run these parts if we're rendering for the frontend
|
73 |
empty( $GLOBALS[ 'SITEORIGIN_PANELS_CACHE_RENDER' ] ) &&
|
74 |
empty( $GLOBALS[ 'SITEORIGIN_PANELS_POST_CONTENT_RENDER' ] )
|
75 |
) {
|
76 |
-
$instance['text'] = $this->unwpautop( $instance['text'] );
|
77 |
-
|
78 |
if (function_exists('wp_make_content_images_responsive')) {
|
79 |
$instance['text'] = wp_make_content_images_responsive( $instance['text'] );
|
80 |
}
|
@@ -93,11 +83,22 @@ class SiteOrigin_Widget_Editor_Widget extends SiteOrigin_Widget {
|
|
93 |
$instance['text'] = $GLOBALS['wp_embed']->run_shortcode( $instance['text'] );
|
94 |
$instance['text'] = $GLOBALS['wp_embed']->autoembed( $instance['text'] );
|
95 |
}
|
96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
$instance['text'] = apply_filters( 'widget_text', $instance['text'] );
|
98 |
|
|
|
|
|
|
|
|
|
99 |
if( $instance['autop'] ) {
|
100 |
-
|
101 |
}
|
102 |
|
103 |
$instance['text'] = do_shortcode( shortcode_unautop( $instance['text'] ) );
|
34 |
'text' => array(
|
35 |
'type' => 'tinymce',
|
36 |
'rows' => 20,
|
37 |
+
'wpautop_toggle_field' => '.siteorigin-widget-field-autop input[type="checkbox"]',
|
38 |
),
|
39 |
'autop' => array(
|
40 |
'type' => 'checkbox',
|
54 |
);
|
55 |
}
|
56 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
public function get_template_variables( $instance, $args ) {
|
58 |
$instance = wp_parse_args(
|
59 |
$instance,
|
60 |
array( 'text' => '' )
|
61 |
+
);
|
62 |
|
63 |
if (
|
64 |
// Only run these parts if we're rendering for the frontend
|
65 |
empty( $GLOBALS[ 'SITEORIGIN_PANELS_CACHE_RENDER' ] ) &&
|
66 |
empty( $GLOBALS[ 'SITEORIGIN_PANELS_POST_CONTENT_RENDER' ] )
|
67 |
) {
|
|
|
|
|
68 |
if (function_exists('wp_make_content_images_responsive')) {
|
69 |
$instance['text'] = wp_make_content_images_responsive( $instance['text'] );
|
70 |
}
|
83 |
$instance['text'] = $GLOBALS['wp_embed']->run_shortcode( $instance['text'] );
|
84 |
$instance['text'] = $GLOBALS['wp_embed']->autoembed( $instance['text'] );
|
85 |
}
|
86 |
+
|
87 |
+
// As in the Text Widget, we need to prevent plugins and themes from running `do_shortcode` in the `widget_text`
|
88 |
+
// filter to avoid running it twice and to prevent `wpautop` from interfering with shortcodes' output.
|
89 |
+
$widget_text_do_shortcode_priority = has_filter( 'widget_text', 'do_shortcode' );
|
90 |
+
if ( $widget_text_do_shortcode_priority !== false ) {
|
91 |
+
remove_filter( 'widget_text', 'do_shortcode', $widget_text_do_shortcode_priority );
|
92 |
+
}
|
93 |
+
|
94 |
$instance['text'] = apply_filters( 'widget_text', $instance['text'] );
|
95 |
|
96 |
+
if ( $widget_text_do_shortcode_priority !== false ) {
|
97 |
+
add_filter( 'widget_text', 'do_shortcode', $widget_text_do_shortcode_priority );
|
98 |
+
}
|
99 |
+
|
100 |
if( $instance['autop'] ) {
|
101 |
+
$instance['text'] = wpautop( $instance['text'] );
|
102 |
}
|
103 |
|
104 |
$instance['text'] = do_shortcode( shortcode_unautop( $instance['text'] ) );
|