Version Description
- February 26 2016 =
- Skip empty sidebars when loading widget scripts.
- Changes to cache clearing.
- Typo corrections.
- Fixed conflict with Child Theme Configurator.
- Image Grid widget: Using correct field and image size names to determine image sizes.
- Editor widget: Added shortcode unautop to Editor widget.
- Contact Form widget: Added check to prevent email resends in contact form widget.
- Masonry widget: properly handles full width rows in Page Builder.
- Hero Image widget: Fix backgrounds URL.
- Price Table widget: Skip empty buttons.
- Maps Widget: Allow clicking markers to reopen info windows if closed.
Download this release
Release Info
Developer | gpriday |
Plugin | SiteOrigin Widgets Bundle |
Version | 1.5.8 |
Comparing to | |
See all releases |
Code changes from version 1.5.7 to 1.5.8
- base/inc.php +1 -0
- base/inc/less-functions.php +3 -1
- base/inc/post-selector.php +1 -0
- base/inc/widgets/base-slider.class.php +15 -4
- base/js/admin.js +1 -1
- base/siteorigin-widget.class.php +5 -3
- js/slider/jquery.slider.js +11 -4
- js/slider/jquery.slider.min.js +1 -1
- readme.txt +16 -2
- so-widgets-bundle.php +47 -22
- widgets/contact/contact.php +35 -2
- widgets/editor/editor.php +1 -1
- widgets/google-map/js/js-map.js +3 -0
- widgets/google-map/js/js-map.min.js +1 -1
- widgets/headline/headline.php +5 -5
- widgets/image-grid/image-grid.php +5 -4
- widgets/image-grid/tpl/default.php +2 -2
- widgets/price-table/tpl/atom.php +5 -3
- widgets/simple-masonry/js/simple-masonry.js +1 -1
- widgets/simple-masonry/js/simple-masonry.min.js +1 -1
- widgets/simple-masonry/simple-masonry.php +1 -1
- widgets/slider/slider.php +1 -1
base/inc.php
CHANGED
@@ -235,6 +235,7 @@ function sow_esc_url( $url ) {
|
|
235 |
if( preg_match('/^post: *([0-9]+)/', $url, $matches) ) {
|
236 |
// Convert the special post URL into a permalink
|
237 |
$url = get_the_permalink( intval($matches[1]) );
|
|
|
238 |
}
|
239 |
|
240 |
$protocols = wp_allowed_protocols();
|
235 |
if( preg_match('/^post: *([0-9]+)/', $url, $matches) ) {
|
236 |
// Convert the special post URL into a permalink
|
237 |
$url = get_the_permalink( intval($matches[1]) );
|
238 |
+
if( empty($url) ) return '';
|
239 |
}
|
240 |
|
241 |
$protocols = wp_allowed_protocols();
|
base/inc/less-functions.php
CHANGED
@@ -21,7 +21,9 @@ class SiteOrigin_Widgets_Less_Functions {
|
|
21 |
* Register less functions in a lessc object
|
22 |
*/
|
23 |
function registerFunctions(&$c){
|
24 |
-
|
|
|
|
|
25 |
}
|
26 |
|
27 |
/**
|
21 |
* Register less functions in a lessc object
|
22 |
*/
|
23 |
function registerFunctions(&$c){
|
24 |
+
if( method_exists( $c, 'registerFunction' ) ) {
|
25 |
+
$c->registerFunction( 'length', array($this, 'length') );
|
26 |
+
}
|
27 |
}
|
28 |
|
29 |
/**
|
base/inc/post-selector.php
CHANGED
@@ -53,6 +53,7 @@ function siteorigin_widget_post_selector_process_query($query){
|
|
53 |
$tax_queries = explode(',', $query['tax_query']);
|
54 |
|
55 |
$query['tax_query'] = array();
|
|
|
56 |
foreach($tax_queries as $tq) {
|
57 |
list($tax, $term) = explode(':', $tq);
|
58 |
|
53 |
$tax_queries = explode(',', $query['tax_query']);
|
54 |
|
55 |
$query['tax_query'] = array();
|
56 |
+
$query['tax_query']['relation'] = 'OR';
|
57 |
foreach($tax_queries as $tq) {
|
58 |
list($tax, $term) = explode(':', $tq);
|
59 |
|
base/inc/widgets/base-slider.class.php
CHANGED
@@ -228,11 +228,22 @@ abstract class SiteOrigin_Widget_Base_Slider extends SiteOrigin_Widget {
|
|
228 |
$background_style[] = 'cursor: pointer;';
|
229 |
}
|
230 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
?>
|
232 |
-
<li
|
233 |
-
class="sow-slider-image <?php if( !empty($background['image']) && !empty($background['image-sizing']) ) echo 'sow-slider-image-' . $background['image-sizing'] ?>"
|
234 |
-
<?php if( !empty( $background['url'] ) ) echo 'data-url=\'' . json_encode(array( 'url' => sow_esc_url($background['url']), 'new_window' => !empty( $background['new_window'] ) ) ) . '\'' ; ?>
|
235 |
-
<?php if( !empty($background_style) ) echo 'style="' . implode(';', $background_style) . '"' ?>>
|
236 |
<?php
|
237 |
$this->render_frame_contents( $i, $frame );
|
238 |
if( !empty( $background['videos'] ) ) {
|
228 |
$background_style[] = 'cursor: pointer;';
|
229 |
}
|
230 |
|
231 |
+
$wrapper_attributes = array(
|
232 |
+
'class' => 'sow-slider-image'
|
233 |
+
);
|
234 |
+
|
235 |
+
if( !empty($background['image']) && !empty($background['image-sizing']) ) {
|
236 |
+
$wrapper_attributes['class'] .= ' ' . 'sow-slider-image-' . $background['image-sizing'];
|
237 |
+
}
|
238 |
+
if( !empty( $background['url'] ) ) {
|
239 |
+
$wrapper_attributes['data-url'] = json_encode(array( 'url' => sow_esc_url($background['url']), 'new_window' => !empty( $background['new_window'] ) ) );
|
240 |
+
}
|
241 |
+
if( !empty($background_style) ) {
|
242 |
+
$wrapper_attributes['style'] = implode(';', $background_style);
|
243 |
+
}
|
244 |
+
|
245 |
?>
|
246 |
+
<li <?php foreach( $wrapper_attributes as $attr => $val ) echo $attr . '="' . esc_attr( $val ) . '" '; ?> >
|
|
|
|
|
|
|
247 |
<?php
|
248 |
$this->render_frame_contents( $i, $frame );
|
249 |
if( !empty( $background['videos'] ) ) {
|
base/js/admin.js
CHANGED
@@ -196,7 +196,7 @@
|
|
196 |
|
197 |
// Tell the modal to show only images.
|
198 |
library: {
|
199 |
-
type: $$.data('library').split(',').map(function(v){ return v.trim() })
|
200 |
},
|
201 |
|
202 |
// Customize the submit button.
|
196 |
|
197 |
// Tell the modal to show only images.
|
198 |
library: {
|
199 |
+
type: $$.data('library').split(',').map(function(v){ return v.trim(); })
|
200 |
},
|
201 |
|
202 |
// Customize the submit button.
|
base/siteorigin-widget.class.php
CHANGED
@@ -622,12 +622,14 @@ abstract class SiteOrigin_Widget extends WP_Widget {
|
|
622 |
|
623 |
$less = $css_imports . "\n\n" . '.so-widget-'.$css_name." { \n".$less."\n } ";
|
624 |
|
625 |
-
$
|
626 |
$lc_functions = new SiteOrigin_Widgets_Less_Functions($this, $instance);
|
627 |
-
$lc_functions->registerFunctions($
|
628 |
|
629 |
try {
|
630 |
-
|
|
|
|
|
631 |
}
|
632 |
catch ( Exception $e ) {
|
633 |
$css = '';
|
622 |
|
623 |
$less = $css_imports . "\n\n" . '.so-widget-'.$css_name." { \n".$less."\n } ";
|
624 |
|
625 |
+
$compiler = new lessc();
|
626 |
$lc_functions = new SiteOrigin_Widgets_Less_Functions($this, $instance);
|
627 |
+
$lc_functions->registerFunctions( $compiler );
|
628 |
|
629 |
try {
|
630 |
+
if( method_exists( $compiler, 'compile' ) ) {
|
631 |
+
$css = $compiler->compile( $less );
|
632 |
+
}
|
633 |
}
|
634 |
catch ( Exception $e ) {
|
635 |
$css = '';
|
js/slider/jquery.slider.js
CHANGED
@@ -76,11 +76,18 @@ jQuery( function($){
|
|
76 |
$slides.each(function( index, el) {
|
77 |
var $slide = $(el);
|
78 |
var urlData = $slide.data('url');
|
|
|
79 |
$slide.click(function(event) {
|
80 |
-
|
81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
}
|
83 |
-
})
|
84 |
});
|
85 |
|
86 |
var setupSlider = function(){
|
@@ -92,7 +99,7 @@ jQuery( function($){
|
|
92 |
var $i = $(this);
|
93 |
|
94 |
$(window)
|
95 |
-
.resize
|
96 |
$i.css( 'height', $i.find('.sow-slider-image-wrapper').outerHeight() );
|
97 |
})
|
98 |
.resize();
|
76 |
$slides.each(function( index, el) {
|
77 |
var $slide = $(el);
|
78 |
var urlData = $slide.data('url');
|
79 |
+
|
80 |
$slide.click(function(event) {
|
81 |
+
|
82 |
+
if( urlData !== undefined ) {
|
83 |
+
var $t = $(event.target);
|
84 |
+
// If this isn't a link, we'll use the URL of the frame
|
85 |
+
if( $t.prop("tagName") !== 'A' ) {
|
86 |
+
event.preventDefault();
|
87 |
+
window.open(urlData.url, urlData.new_window ? '_blank' : '_self');
|
88 |
+
}
|
89 |
}
|
90 |
+
} );
|
91 |
});
|
92 |
|
93 |
var setupSlider = function(){
|
99 |
var $i = $(this);
|
100 |
|
101 |
$(window)
|
102 |
+
.on('resize panelsStretchRows', function(){
|
103 |
$i.css( 'height', $i.find('.sow-slider-image-wrapper').outerHeight() );
|
104 |
})
|
105 |
.resize();
|
js/slider/jquery.slider.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
var siteoriginSlider={};jQuery(function(e){var i=siteoriginSlider.playSlideVideo=function(i){e(i).find("video").each(function(){"undefined"!=typeof this.play&&this.play()})},t=siteoriginSlider.pauseSlideVideo=function(i){e(i).find("video").each(function(){"undefined"!=typeof this.pause&&this.pause()})},n=siteoriginSlider.setupActiveSlide=function(i,t,n){var s=e(i).find(".cycle-sentinel"),o=e(t),a=o.find("video.sow-background-element");if(void 0==n?s.css("height",o.outerHeight()):s.animate({height:o.outerHeight()},n),a.length){var d=o.outerWidth()/o.outerHeight(),c=a.outerWidth()/a.outerHeight();d>c?a.css({width:"100%",height:"auto"}):a.css({width:"auto",height:"100%"}),a.css({"margin-left":-Math.ceil(a.width()/2),"margin-top":-Math.ceil(a.height()/2)})}};e(".sow-slider-images").each(function(){var s=e(this),o=s.siblings(".sow-slider-pagination"),a=s.closest(".sow-slider-base"),d=a.find(".sow-slide-nav"),c=s.find(".sow-slider-image"),l=s.data("settings");c.each(function(i,t){var n=e(t),s=n.data("url");n.click(function(i){(
|
1 |
+
var siteoriginSlider={};jQuery(function(e){var i=siteoriginSlider.playSlideVideo=function(i){e(i).find("video").each(function(){"undefined"!=typeof this.play&&this.play()})},t=siteoriginSlider.pauseSlideVideo=function(i){e(i).find("video").each(function(){"undefined"!=typeof this.pause&&this.pause()})},n=siteoriginSlider.setupActiveSlide=function(i,t,n){var s=e(i).find(".cycle-sentinel"),o=e(t),a=o.find("video.sow-background-element");if(void 0==n?s.css("height",o.outerHeight()):s.animate({height:o.outerHeight()},n),a.length){var d=o.outerWidth()/o.outerHeight(),c=a.outerWidth()/a.outerHeight();d>c?a.css({width:"100%",height:"auto"}):a.css({width:"auto",height:"100%"}),a.css({"margin-left":-Math.ceil(a.width()/2),"margin-top":-Math.ceil(a.height()/2)})}};e(".sow-slider-images").each(function(){var s=e(this),o=s.siblings(".sow-slider-pagination"),a=s.closest(".sow-slider-base"),d=a.find(".sow-slide-nav"),c=s.find(".sow-slider-image"),l=s.data("settings");c.each(function(i,t){var n=e(t),s=n.data("url");n.click(function(i){if(void 0!==s){var t=e(i.target);"A"!==t.prop("tagName")&&(i.preventDefault(),window.open(s.url,s.new_window?"_blank":"_self"))}})});var r=function(){if(a.show(),s.find(".sow-slider-image").each(function(){var i=e(this);e(window).on("resize panelsStretchRows",function(){i.css("height",i.find(".sow-slider-image-wrapper").outerHeight())}).resize()}),s.on({"cycle-after":function(t,s,o,a,d){var c=e(this);i(a),n(c,a)},"cycle-before":function(i,s,a,d,c){var l=e(this);o.find("> li").removeClass("sow-active").eq(s.slideNum-1).addClass("sow-active"),t(a),n(l,d,s.speed)},"cycle-initialized":function(t,a){i(e(this).find(".cycle-slide-active")),n(s,a.slides[0]),o.find(">li").removeClass("sow-active").eq(0).addClass("sow-active"),a.slideCount<=1&&(o.hide(),d.hide()),e(window).resize()}}).cycle({slides:"> .sow-slider-image",speed:l.speed,timeout:l.timeout,swipe:!0,"swipe-fx":"scrollHorz"}),s.find("video.sow-background-element").on("loadeddata",function(){n(s,s.find(".cycle-slide-active"))}),o.add(d).hide(),!a.hasClass("sow-slider-is-mobile")&&c.length>1){var r=!1;a.mouseenter(function(){o.add(d).clearQueue().fadeIn(150),r=!1}).mouseleave(function(){r=!0,setTimeout(function(){r&&o.add(d).clearQueue().fadeOut(150),r=!1},750)})}e(window).resize(function(){n(s,s.find(".cycle-slide-active"))}),o.find("> li > a").click(function(i){i.preventDefault(),s.cycle("goto",e(this).data("goto"))}),d.find("> a").click(function(i){i.preventDefault(),s.cycle(e(this).data("action"))}),a.keydown(function(e){37===e.which?s.cycle("prev"):39===e.which&&s.cycle("next")})},h=s.find("img"),u=0,f=!1;h.each(function(){e(this);this.complete?u++:e(this).one("load",function(){u++,u!==h.length||f||(r(),f=!0)}).attr("src",e(this).attr("src")),u!==h.length||f||(r(),f=!0)}),0===h.length&&r()})});
|
readme.txt
CHANGED
@@ -2,7 +2,8 @@
|
|
2 |
Tags: bundle, widget, button, slider, image, carousel, price table, google maps, tinymce, social links
|
3 |
Requires at least: 3.9
|
4 |
Tested up to: 4.4.2
|
5 |
-
Stable tag: 1.5.
|
|
|
6 |
License: GPLv3 or later
|
7 |
Contributors: gpriday, braam-genis
|
8 |
|
@@ -50,6 +51,19 @@ The SiteOrigin Widgets Bundle is the perfect platform to build widgets for your
|
|
50 |
|
51 |
== Changelog ==
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
= 1.5.7 - February 4 2016 =
|
54 |
* Restored old class name for Image Grid Widget.
|
55 |
|
@@ -260,4 +274,4 @@ The SiteOrigin Widgets Bundle is the perfect platform to build widgets for your
|
|
260 |
* Clean up of code and bundled widgets.
|
261 |
|
262 |
= 1.0 =
|
263 |
-
* Initial release.
|
2 |
Tags: bundle, widget, button, slider, image, carousel, price table, google maps, tinymce, social links
|
3 |
Requires at least: 3.9
|
4 |
Tested up to: 4.4.2
|
5 |
+
Stable tag: 1.5.7
|
6 |
+
Build time: 2016-02-29T21:10:05+02:00
|
7 |
License: GPLv3 or later
|
8 |
Contributors: gpriday, braam-genis
|
9 |
|
51 |
|
52 |
== Changelog ==
|
53 |
|
54 |
+
= 1.5.8 - February 26 2016 =
|
55 |
+
* Skip empty sidebars when loading widget scripts.
|
56 |
+
* Changes to cache clearing.
|
57 |
+
* Typo corrections.
|
58 |
+
* Fixed conflict with Child Theme Configurator.
|
59 |
+
* Image Grid widget: Using correct field and image size names to determine image sizes.
|
60 |
+
* Editor widget: Added shortcode unautop to Editor widget.
|
61 |
+
* Contact Form widget: Added check to prevent email resends in contact form widget.
|
62 |
+
* Masonry widget: properly handles full width rows in Page Builder.
|
63 |
+
* Hero Image widget: Fix backgrounds URL.
|
64 |
+
* Price Table widget: Skip empty buttons.
|
65 |
+
* Maps Widget: Allow clicking markers to reopen info windows if closed.
|
66 |
+
|
67 |
= 1.5.7 - February 4 2016 =
|
68 |
* Restored old class name for Image Grid Widget.
|
69 |
|
274 |
* Clean up of code and bundled widgets.
|
275 |
|
276 |
= 1.0 =
|
277 |
+
* Initial release.
|
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.5.
|
6 |
Text Domain: so-widgets-bundle
|
7 |
Domain Path: /languages
|
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.5.
|
16 |
define('SOW_BUNDLE_JS_SUFFIX', '.min');
|
17 |
define('SOW_BUNDLE_BASE_FILE', __FILE__);
|
18 |
|
@@ -49,14 +49,18 @@ class SiteOrigin_Widgets_Bundle {
|
|
49 |
add_action( 'after_setup_theme', array($this, 'get_widget_folders'), 11 );
|
50 |
add_action( 'after_setup_theme', array($this, 'load_widget_plugins'), 11 );
|
51 |
|
52 |
-
// Add the
|
53 |
add_action( 'plugin_action_links_' . plugin_basename(__FILE__), array($this, 'plugin_action_links') );
|
54 |
|
55 |
-
// Version check for cache clearing
|
56 |
add_action( 'admin_init', array($this, 'plugin_version_check') );
|
57 |
add_action( 'siteorigin_widgets_version_update', array( $this, 'handle_update' ), 10, 2 );
|
58 |
add_action( 'admin_notices', array( $this, 'display_admin_notices') );
|
59 |
|
|
|
|
|
|
|
|
|
|
|
60 |
// These filters are used to activate any widgets that are missing.
|
61 |
add_filter( 'siteorigin_panels_data', array($this, 'load_missing_widgets') );
|
62 |
add_filter( 'siteorigin_panels_prebuilt_layout', array($this, 'load_missing_widgets') );
|
@@ -98,36 +102,56 @@ class SiteOrigin_Widgets_Bundle {
|
|
98 |
|
99 |
$active_version = get_option( 'siteorigin_widget_bundle_version' );
|
100 |
|
101 |
-
|
102 |
-
|
103 |
-
update_option( 'siteorigin_widget_bundle_version', SOW_BUNDLE_VERSION );
|
104 |
|
105 |
-
|
106 |
-
if( function_exists('WP_Filesystem') && WP_Filesystem() ) {
|
107 |
-
global $wp_filesystem;
|
108 |
-
$upload_dir = wp_upload_dir();
|
109 |
-
|
110 |
-
// Remove any old widget cache files, if they exist.
|
111 |
-
$list = $wp_filesystem->dirlist( $upload_dir['basedir'] . '/siteorigin-widgets/' );
|
112 |
-
if( !empty($list) ) {
|
113 |
-
foreach($list as $file) {
|
114 |
-
// Delete the file
|
115 |
-
$wp_filesystem->delete( $upload_dir['basedir'] . '/siteorigin-widgets/' . $file['name'] );
|
116 |
-
}
|
117 |
-
}
|
118 |
-
}
|
119 |
|
120 |
-
|
|
|
121 |
do_action( 'siteorigin_widgets_version_update', SOW_BUNDLE_VERSION, $active_version );
|
|
|
122 |
}
|
123 |
|
124 |
}
|
125 |
|
|
|
|
|
|
|
|
|
|
|
126 |
function handle_update($old_version, $new_version) {
|
127 |
//Always check for new widgets.
|
128 |
$this->check_for_new_widgets();
|
129 |
}
|
130 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
/**
|
132 |
* Setup and return the widget folders
|
133 |
*/
|
@@ -583,6 +607,7 @@ class SiteOrigin_Widgets_Bundle {
|
|
583 |
function enqueue_active_widgets_scripts() {
|
584 |
global $wp_registered_widgets;
|
585 |
$sidebars_widgets = wp_get_sidebars_widgets();
|
|
|
586 |
foreach( $sidebars_widgets as $sidebar => $widgets ) {
|
587 |
if ( ! empty( $widgets ) && $sidebar !== "wp_inactive_widgets") {
|
588 |
foreach ( $widgets as $i => $id ) {
|
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.5.8
|
6 |
Text Domain: so-widgets-bundle
|
7 |
Domain Path: /languages
|
8 |
Author: SiteOrigin
|
12 |
License URI: https://www.gnu.org/licenses/gpl-3.0.txt
|
13 |
*/
|
14 |
|
15 |
+
define('SOW_BUNDLE_VERSION', '1.5.8');
|
16 |
define('SOW_BUNDLE_JS_SUFFIX', '.min');
|
17 |
define('SOW_BUNDLE_BASE_FILE', __FILE__);
|
18 |
|
49 |
add_action( 'after_setup_theme', array($this, 'get_widget_folders'), 11 );
|
50 |
add_action( 'after_setup_theme', array($this, 'load_widget_plugins'), 11 );
|
51 |
|
52 |
+
// Add the plugin_action_links links.
|
53 |
add_action( 'plugin_action_links_' . plugin_basename(__FILE__), array($this, 'plugin_action_links') );
|
54 |
|
|
|
55 |
add_action( 'admin_init', array($this, 'plugin_version_check') );
|
56 |
add_action( 'siteorigin_widgets_version_update', array( $this, 'handle_update' ), 10, 2 );
|
57 |
add_action( 'admin_notices', array( $this, 'display_admin_notices') );
|
58 |
|
59 |
+
// Actions for clearing widget cache
|
60 |
+
add_action( 'switch_theme', array($this, 'clear_widget_cache') );
|
61 |
+
add_action( 'activated_plugin', array($this, 'clear_widget_cache') );
|
62 |
+
add_action( 'upgrader_process_complete', array($this, 'clear_widget_cache') );
|
63 |
+
|
64 |
// These filters are used to activate any widgets that are missing.
|
65 |
add_filter( 'siteorigin_panels_data', array($this, 'load_missing_widgets') );
|
66 |
add_filter( 'siteorigin_panels_prebuilt_layout', array($this, 'load_missing_widgets') );
|
102 |
|
103 |
$active_version = get_option( 'siteorigin_widget_bundle_version' );
|
104 |
|
105 |
+
$is_new = empty($active_version) || version_compare( $active_version, SOW_BUNDLE_VERSION, '<' );
|
106 |
+
$is_new = apply_filters( 'siteorigin_widgets_is_new_version', $is_new );
|
|
|
107 |
|
108 |
+
if( $is_new ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
|
110 |
+
update_option( 'siteorigin_widget_bundle_version', SOW_BUNDLE_VERSION );
|
111 |
+
// If this is a new version, then trigger an action to let widgets handle the updates.
|
112 |
do_action( 'siteorigin_widgets_version_update', SOW_BUNDLE_VERSION, $active_version );
|
113 |
+
$this->clear_widget_cache();
|
114 |
}
|
115 |
|
116 |
}
|
117 |
|
118 |
+
/**
|
119 |
+
* This should call any necessary functions when the plugin has been updated.
|
120 |
+
*
|
121 |
+
* @action siteorigin_widgets_version_update
|
122 |
+
*/
|
123 |
function handle_update($old_version, $new_version) {
|
124 |
//Always check for new widgets.
|
125 |
$this->check_for_new_widgets();
|
126 |
}
|
127 |
|
128 |
+
/**
|
129 |
+
* Deletes any CSS generated by/for the widgets.
|
130 |
+
* Called on 'upgrader_process_complete', 'switch_theme', and 'activated_plugin' actions.
|
131 |
+
* Can also be called directly on the `SiteOrigin_Widgets_Bundle` singleton class.
|
132 |
+
*
|
133 |
+
* @action upgrader_process_complete Occurs after any theme, plugin or the WordPress core is updated to a new version.
|
134 |
+
* @action switch_theme Occurs after switching to a different theme.
|
135 |
+
* @action activated_plugin Occurs after a plugin has been activated.
|
136 |
+
*
|
137 |
+
*/
|
138 |
+
function clear_widget_cache() {
|
139 |
+
// Remove all cached CSS for SiteOrigin Widgets
|
140 |
+
if( function_exists('WP_Filesystem') && WP_Filesystem() ) {
|
141 |
+
global $wp_filesystem;
|
142 |
+
$upload_dir = wp_upload_dir();
|
143 |
+
|
144 |
+
// Remove any old widget cache files, if they exist.
|
145 |
+
$list = $wp_filesystem->dirlist( $upload_dir['basedir'] . '/siteorigin-widgets/' );
|
146 |
+
if( !empty($list) ) {
|
147 |
+
foreach($list as $file) {
|
148 |
+
// Delete the file
|
149 |
+
$wp_filesystem->delete( $upload_dir['basedir'] . '/siteorigin-widgets/' . $file['name'] );
|
150 |
+
}
|
151 |
+
}
|
152 |
+
}
|
153 |
+
}
|
154 |
+
|
155 |
/**
|
156 |
* Setup and return the widget folders
|
157 |
*/
|
607 |
function enqueue_active_widgets_scripts() {
|
608 |
global $wp_registered_widgets;
|
609 |
$sidebars_widgets = wp_get_sidebars_widgets();
|
610 |
+
if( empty($sidebars_widgets) ) return;
|
611 |
foreach( $sidebars_widgets as $sidebar => $widgets ) {
|
612 |
if ( ! empty( $widgets ) && $sidebar !== "wp_inactive_widgets") {
|
613 |
foreach ( $widgets as $i => $id ) {
|
widgets/contact/contact.php
CHANGED
@@ -830,7 +830,12 @@ class SiteOrigin_Widgets_ContactForm_Widget extends SiteOrigin_Widget {
|
|
830 |
|
831 |
if( empty($errors) ) {
|
832 |
// We can send the email
|
833 |
-
|
|
|
|
|
|
|
|
|
|
|
834 |
$errors['_general']['send'] = __('Error sending email, please try again later.', 'so-widgets-bundle');
|
835 |
}
|
836 |
}
|
@@ -942,7 +947,35 @@ class SiteOrigin_Widgets_ContactForm_Widget extends SiteOrigin_Widget {
|
|
942 |
'From: ' . $this->sanitize_header( $email_fields['name'] ) . ' <' . sanitize_email( $email_fields['email'] ) . '>',
|
943 |
);
|
944 |
|
945 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
946 |
}
|
947 |
|
948 |
/**
|
830 |
|
831 |
if( empty($errors) ) {
|
832 |
// We can send the email
|
833 |
+
$success = $this->send_mail( $email_fields, $instance );
|
834 |
+
|
835 |
+
if( is_wp_error( $success ) ) {
|
836 |
+
$errors['_general']['send'] = $success->get_error_message();
|
837 |
+
}
|
838 |
+
else if( !$success ) {
|
839 |
$errors['_general']['send'] = __('Error sending email, please try again later.', 'so-widgets-bundle');
|
840 |
}
|
841 |
}
|
947 |
'From: ' . $this->sanitize_header( $email_fields['name'] ) . ' <' . sanitize_email( $email_fields['email'] ) . '>',
|
948 |
);
|
949 |
|
950 |
+
|
951 |
+
// Check if this is a duplicated send
|
952 |
+
$hash = md5( json_encode( array(
|
953 |
+
'body' => $body,
|
954 |
+
'headers' => $headers
|
955 |
+
) ) );
|
956 |
+
$hash_check = get_option( 'so_contact_hashes', array() );
|
957 |
+
// Remove expired hashes
|
958 |
+
foreach( $hash_check as $hash => $time ) {
|
959 |
+
if( $time < time() - 5 * 60 ) {
|
960 |
+
unset( $hash_check[$hash] );
|
961 |
+
}
|
962 |
+
}
|
963 |
+
|
964 |
+
if( isset( $hash_check[$hash] ) ) {
|
965 |
+
// Store the version with the expired hashes removed
|
966 |
+
update_option( 'so_contact_hashes', $hash_check, true );
|
967 |
+
|
968 |
+
// This is a duplicate message
|
969 |
+
return new WP_Error( 1, __('Message already sent', 'so-widgets-bundle') );
|
970 |
+
}
|
971 |
+
|
972 |
+
$mail_success = wp_mail( $instance['settings']['to'], $email_fields['subject'], $body, $headers );
|
973 |
+
if( $mail_success ) {
|
974 |
+
$hash_check[$hash] = time();
|
975 |
+
update_option( 'so_contact_hashes', $hash_check, true );
|
976 |
+
}
|
977 |
+
|
978 |
+
return $mail_success;
|
979 |
}
|
980 |
|
981 |
/**
|
widgets/editor/editor.php
CHANGED
@@ -65,7 +65,7 @@ class SiteOrigin_Widget_Editor_Widget extends SiteOrigin_Widget {
|
|
65 |
if( $instance['autop'] ) {
|
66 |
$instance['text'] = wpautop( $instance['text'] );
|
67 |
}
|
68 |
-
$instance['text'] = do_shortcode( $instance['text'] );
|
69 |
|
70 |
return array(
|
71 |
'text' => $instance['text'],
|
65 |
if( $instance['autop'] ) {
|
66 |
$instance['text'] = wpautop( $instance['text'] );
|
67 |
}
|
68 |
+
$instance['text'] = do_shortcode( shortcode_unautop( $instance['text'] ) );
|
69 |
|
70 |
return array(
|
71 |
'text' => $instance['text'],
|
widgets/google-map/js/js-map.js
CHANGED
@@ -88,6 +88,9 @@ var SiteOriginGoogleMap = function($) {
|
|
88 |
var infoWindow = new google.maps.InfoWindow(infoWindowOptions);
|
89 |
if (infoDisplay == 'always') {
|
90 |
infoWindow.open(map, marker);
|
|
|
|
|
|
|
91 |
} else {
|
92 |
marker.addListener(infoDisplay, function () {
|
93 |
infoWindow.open(map, marker);
|
88 |
var infoWindow = new google.maps.InfoWindow(infoWindowOptions);
|
89 |
if (infoDisplay == 'always') {
|
90 |
infoWindow.open(map, marker);
|
91 |
+
marker.addListener('click', function () {
|
92 |
+
infoWindow.open(map, marker);
|
93 |
+
});
|
94 |
} else {
|
95 |
marker.addListener(infoDisplay, function () {
|
96 |
infoWindow.open(map, marker);
|
widgets/google-map/js/js-map.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
function soGoogleMapInitialize(){new SiteOriginGoogleMap(window.jQuery).loadMaps()}var SiteOriginGoogleMap=function(e){return{showMap:function(e,o,a){var i=Number(a.zoom);i||(i=14);var
|
1 |
+
function soGoogleMapInitialize(){new SiteOriginGoogleMap(window.jQuery).loadMaps()}var SiteOriginGoogleMap=function(e){return{showMap:function(e,o,a){var i=Number(a.zoom);i||(i=14);var n="user_map_style",t={zoom:i,scrollwheel:a.scrollZoom,draggable:a.draggable,disableDefaultUI:a.disableUi,center:o,mapTypeControlOptions:{mapTypeIds:[google.maps.MapTypeId.ROADMAP,n]}},s=new google.maps.Map(e,t),r={name:a.mapName},p=a.mapStyles;if(p){var l=new google.maps.StyledMapType(p,r);s.mapTypes.set(n,l),s.setMapTypeId(n)}if(a.markerAtCenter&&new google.maps.Marker({position:o,map:s,draggable:a.markersDraggable,icon:a.markerIcon,title:""}),a.keepCentered){var g;google.maps.event.addDomListener(s,"idle",function(){g=s.getCenter()}),google.maps.event.addDomListener(window,"resize",function(){s.setCenter(g)})}this.showMarkers(a.markerPositions,s,a),this.showDirections(a.directions,s,a)},showMarkers:function(e,o,a){if(e&&e.length){var i=new google.maps.Geocoder;e.forEach(function(e){var n=function(){i.geocode({address:e.place},function(i,t){if(t==google.maps.GeocoderStatus.OK){var s=new google.maps.Marker({position:i[0].geometry.location,map:o,draggable:a.markersDraggable,icon:a.markerIcon,title:""});if(e.hasOwnProperty("info")&&e.info){var r={content:e.info};e.hasOwnProperty("info_max_width")&&e.info_max_width&&(r.maxWidth=e.info_max_width);var p=a.markerInfoDisplay;r.disableAutoPan="always"==p;var l=new google.maps.InfoWindow(r);"always"==p?(l.open(o,s),s.addListener("click",function(){l.open(o,s)})):s.addListener(p,function(){l.open(o,s)})}}else t==google.maps.GeocoderStatus.OVER_QUERY_LIMIT&&setTimeout(n,1e3*Math.random(),e)})};setTimeout(n,1e3*Math.random(),e)})}},showDirections:function(e,o){if(e){e.waypoints&&e.waypoints.length&&e.waypoints.map(function(e){e.stopover=Boolean(e.stopover)});var a=new google.maps.DirectionsRenderer;a.setMap(o);var i=new google.maps.DirectionsService;i.route({origin:e.origin,destination:e.destination,travelMode:e.travelMode.toUpperCase(),avoidHighways:e.avoidHighways,avoidTolls:e.avoidTolls,waypoints:e.waypoints,optimizeWaypoints:e.optimizeWaypoints},function(e,o){o==google.maps.DirectionsStatus.OK&&a.setDirections(e)})}},loadMaps:function(){e(".sow-google-map-canvas").each(function(o,a){var i=e(a),n=i.data("options"),t=n.address;if(!t){var s=n.markerPositions;s&&s.length&&(t=s[0].place)}var r,p={address:t};if(t&&t.indexOf(",")>-1){var l=t.split(",");l&&2==l.length&&(r=new google.maps.LatLng(l[0],l[1]),isNaN(r.lat())||isNaN(r.lng())||(p={location:{lat:r.lat(),lng:r.lng()}}))}if(p.hasOwnProperty("location"))this.showMap(a,p.location,n);else if(p.hasOwnProperty("address")){var g=new google.maps.Geocoder;g.geocode(p,function(e,o){o==google.maps.GeocoderStatus.OK?this.showMap(a,e[0].geometry.location,n):o==google.maps.GeocoderStatus.ZERO_RESULTS&&i.append("<div><p><strong>There were no results for the place you entered. Please try another.</strong></p></div>")}.bind(this))}}.bind(this))}}};jQuery(function(e){if(window.google&&window.google.maps)new SiteOriginGoogleMap(e).loadMaps();else{var o=e(".sow-google-map-canvas").data("api-key"),a="https://maps.googleapis.com/maps/api/js?v=3.exp&callback=soGoogleMapInitialize";o&&(a+="&key="+o);var i=e('<script type="text/javascript" src="'+a+'">');e("body").append(i)}});
|
widgets/headline/headline.php
CHANGED
@@ -221,12 +221,12 @@ class SiteOrigin_Widget_Headline_Widget extends SiteOrigin_Widget {
|
|
221 |
$less_vars['divider_color'] = $divider_styles['color'];
|
222 |
}
|
223 |
|
224 |
-
if ( !empty( $divider_styles['top_margin'] )
|
225 |
-
$less_vars['divider_top_margin'] = $divider_styles['top_margin']
|
226 |
}
|
227 |
|
228 |
-
if ( !empty( $divider_styles['side_margin'] )
|
229 |
-
$less_vars['divider_side_margin'] = $divider_styles['side_margin']
|
230 |
}
|
231 |
|
232 |
|
@@ -275,4 +275,4 @@ class SiteOrigin_Widget_Headline_Widget extends SiteOrigin_Widget {
|
|
275 |
}
|
276 |
}
|
277 |
|
278 |
-
siteorigin_widget_register('sow-headline', __FILE__, 'SiteOrigin_Widget_Headline_Widget');
|
221 |
$less_vars['divider_color'] = $divider_styles['color'];
|
222 |
}
|
223 |
|
224 |
+
if ( !empty( $divider_styles['top_margin'] ) ) {
|
225 |
+
$less_vars['divider_top_margin'] = $divider_styles['top_margin'];
|
226 |
}
|
227 |
|
228 |
+
if ( !empty( $divider_styles['side_margin'] ) ) {
|
229 |
+
$less_vars['divider_side_margin'] = $divider_styles['side_margin'];
|
230 |
}
|
231 |
|
232 |
|
275 |
}
|
276 |
}
|
277 |
|
278 |
+
siteorigin_widget_register('sow-headline', __FILE__, 'SiteOrigin_Widget_Headline_Widget');
|
widgets/image-grid/image-grid.php
CHANGED
@@ -107,10 +107,11 @@ class SiteOrigin_Widgets_ImageGrid_Widget extends SiteOrigin_Widget {
|
|
107 |
*/
|
108 |
function modify_form( $form ){
|
109 |
$intermediate = get_intermediate_image_sizes();
|
110 |
-
|
111 |
-
|
|
|
112 |
}
|
113 |
-
$sizes = array_merge( array( 'full' => __('Full', 'so-widgets-bundle') ), $
|
114 |
$form['display']['fields']['attachment_size']['options'] = $sizes;
|
115 |
return $form;
|
116 |
}
|
@@ -132,4 +133,4 @@ class SiteOrigin_Widgets_ImageGrid_Widget extends SiteOrigin_Widget {
|
|
132 |
}
|
133 |
}
|
134 |
|
135 |
-
siteorigin_widget_register( 'sow-image-grid', __FILE__, 'SiteOrigin_Widgets_ImageGrid_Widget' );
|
107 |
*/
|
108 |
function modify_form( $form ){
|
109 |
$intermediate = get_intermediate_image_sizes();
|
110 |
+
$sizes = array();
|
111 |
+
foreach( $intermediate as $name ) {
|
112 |
+
$sizes[$name] = ucwords(preg_replace('/[-_]/', ' ', $name));
|
113 |
}
|
114 |
+
$sizes = array_merge( array( 'full' => __('Full', 'so-widgets-bundle') ), $sizes );
|
115 |
$form['display']['fields']['attachment_size']['options'] = $sizes;
|
116 |
return $form;
|
117 |
}
|
133 |
}
|
134 |
}
|
135 |
|
136 |
+
siteorigin_widget_register( 'sow-image-grid', __FILE__, 'SiteOrigin_Widgets_ImageGrid_Widget' );
|
widgets/image-grid/tpl/default.php
CHANGED
@@ -7,7 +7,7 @@
|
|
7 |
foreach( $instance['images'] as $image ) {
|
8 |
echo '<div class="sow-image-grid-image">';
|
9 |
if ( ! empty( $image['url'] ) ) echo '<a href="' . sow_esc_url( $image['url'] ) . '">';
|
10 |
-
echo wp_get_attachment_image( $image['image'], $
|
11 |
'title' => $image['title']
|
12 |
) );
|
13 |
if ( ! empty( $image['url'] ) ) echo '</a>';
|
@@ -15,4 +15,4 @@
|
|
15 |
}
|
16 |
?>
|
17 |
</div>
|
18 |
-
<?php endif; ?>
|
7 |
foreach( $instance['images'] as $image ) {
|
8 |
echo '<div class="sow-image-grid-image">';
|
9 |
if ( ! empty( $image['url'] ) ) echo '<a href="' . sow_esc_url( $image['url'] ) . '">';
|
10 |
+
echo wp_get_attachment_image( $image['image'], $instance['display']['attachment_size'], false, array(
|
11 |
'title' => $image['title']
|
12 |
) );
|
13 |
if ( ! empty( $image['url'] ) ) echo '</a>';
|
15 |
}
|
16 |
?>
|
17 |
</div>
|
18 |
+
<?php endif; ?>
|
widgets/price-table/tpl/atom.php
CHANGED
@@ -39,9 +39,11 @@
|
|
39 |
<?php endforeach; ?>
|
40 |
</div>
|
41 |
|
42 |
-
|
43 |
-
<
|
44 |
-
|
|
|
|
|
45 |
</div>
|
46 |
<?php endforeach; ?>
|
47 |
|
39 |
<?php endforeach; ?>
|
40 |
</div>
|
41 |
|
42 |
+
<?php if( !empty($column['button']) ) : ?>
|
43 |
+
<div class="ow-pt-button">
|
44 |
+
<a href='<?php echo sow_esc_url($column['url']) ?>' class="ow-pt-link" <?php if( !empty( $instance['button_new_window'] ) ) echo 'target="_blank"' ?>><?php echo esc_html($column['button']) ?></a>
|
45 |
+
</div>
|
46 |
+
<?php endif; ?>
|
47 |
</div>
|
48 |
<?php endforeach; ?>
|
49 |
|
widgets/simple-masonry/js/simple-masonry.js
CHANGED
@@ -61,6 +61,6 @@ jQuery(function ($) {
|
|
61 |
});
|
62 |
};
|
63 |
|
64 |
-
|
65 |
resizeMasonry();
|
66 |
});
|
61 |
});
|
62 |
};
|
63 |
|
64 |
+
$(window).on('resize panelsStretchRows', resizeMasonry);
|
65 |
resizeMasonry();
|
66 |
});
|
widgets/simple-masonry/js/simple-masonry.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
jQuery(function(t){var a=t(".sow-masonry-grid"),i=function(){a.each(function(){var a=t(this),i=a.data("layouts"),e=window.matchMedia("(max-width: "+i.tablet.breakPoint+"px)"),h=window.matchMedia("(max-width: "+i.mobile.breakPoint+"px)"),o=i.desktop;h.matches?o=i.mobile:e.matches&&(o=i.tablet);var s=o.numColumns;a.css("width","auto");var r=o.gutter*(s-1),n=Math.floor((a.width()-r)/s);a.width(n*s+r),a.imagesLoaded(function(){a.find("> .sow-masonry-grid-item").each(function(){var a=t(this),i=a.data("colSpan");i=Math.max(Math.min(i,o.numColumns),1),a.width(n*i+o.gutter*(i-1));var e=a.data("rowSpan");e=Math.max(Math.min(e,o.numColumns),1);var h=o.rowHeight||n;a.css("height",h*e+o.gutter*(e-1));var s=a.find("> img,> a > img"),r=s.attr("height")>0?s.attr("width")/s.attr("height"):1,m=a.height()>0?a.width()/a.height():1;if(r=parseFloat(r.toFixed(3)),m=parseFloat(m.toFixed(3)),r>m){s.css("width","auto"),s.css("height","100%"),s.css("margin-top","");var d=(s.width()-a.width())*-.5;s.css("margin-left",d+"px")}else{s.css("height","auto"),s.css("width","100%"),s.css("margin-left","");var c=(s.height()-a.height())*-.5;s.css("margin-top",c+"px")}}),a.packery({itemSelector:".sow-masonry-grid-item",columnWidth:n,gutter:o.gutter})})})};t(window).resize
|
1 |
+
jQuery(function(t){var a=t(".sow-masonry-grid"),i=function(){a.each(function(){var a=t(this),i=a.data("layouts"),e=window.matchMedia("(max-width: "+i.tablet.breakPoint+"px)"),h=window.matchMedia("(max-width: "+i.mobile.breakPoint+"px)"),o=i.desktop;h.matches?o=i.mobile:e.matches&&(o=i.tablet);var s=o.numColumns;a.css("width","auto");var r=o.gutter*(s-1),n=Math.floor((a.width()-r)/s);a.width(n*s+r),a.imagesLoaded(function(){a.find("> .sow-masonry-grid-item").each(function(){var a=t(this),i=a.data("colSpan");i=Math.max(Math.min(i,o.numColumns),1),a.width(n*i+o.gutter*(i-1));var e=a.data("rowSpan");e=Math.max(Math.min(e,o.numColumns),1);var h=o.rowHeight||n;a.css("height",h*e+o.gutter*(e-1));var s=a.find("> img,> a > img"),r=s.attr("height")>0?s.attr("width")/s.attr("height"):1,m=a.height()>0?a.width()/a.height():1;if(r=parseFloat(r.toFixed(3)),m=parseFloat(m.toFixed(3)),r>m){s.css("width","auto"),s.css("height","100%"),s.css("margin-top","");var d=(s.width()-a.width())*-.5;s.css("margin-left",d+"px")}else{s.css("height","auto"),s.css("width","100%"),s.css("margin-left","");var c=(s.height()-a.height())*-.5;s.css("margin-top",c+"px")}}),a.packery({itemSelector:".sow-masonry-grid-item",columnWidth:n,gutter:o.gutter})})})};t(window).on("resize panelsStretchRows",i),i()});
|
widgets/simple-masonry/simple-masonry.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Widget Name: Simple Masonry Layout
|
4 |
-
Description: A masonry layout for images
|
5 |
Author: SiteOrigin
|
6 |
Author URI: https://siteorigin.com
|
7 |
*/
|
1 |
<?php
|
2 |
/*
|
3 |
Widget Name: Simple Masonry Layout
|
4 |
+
Description: A masonry layout for images. Images can link to your posts.
|
5 |
Author: SiteOrigin
|
6 |
Author URI: https://siteorigin.com
|
7 |
*/
|
widgets/slider/slider.php
CHANGED
@@ -103,7 +103,7 @@ class SiteOrigin_Widget_Slider_Widget extends SiteOrigin_Widget_Base_Slider {
|
|
103 |
);
|
104 |
|
105 |
return array(
|
106 |
-
'color' => !empty( $frame['background_color'] ) ? $frame['background_color'] :
|
107 |
'image' => !empty( $background_image ) ? $background_image[0] : false,
|
108 |
'opacity' => 1,
|
109 |
'image-sizing' => 'cover',
|
103 |
);
|
104 |
|
105 |
return array(
|
106 |
+
'color' => !empty( $frame['background_color'] ) ? $frame['background_color'] : false,
|
107 |
'image' => !empty( $background_image ) ? $background_image[0] : false,
|
108 |
'opacity' => 1,
|
109 |
'image-sizing' => 'cover',
|