Version Description
- Fixed z-index bug with dropdown menus in multiple themes.
- Update manager is now fully working and querying extension updates correctly.
- Fixed issue that caused slides to show up beneath transparent PNG's.
- Fixed error displayed when trying to using the Easing Slider 'Lite' shortcode after deleting the "Lite" slider.
- Fixed license key deactivation bug.
- Added alt text attribute to images, which was missing previously.
- Fixed double slashing bug with stylesheets and scripts.
Download this release
Release Info
Developer | MatthewRuddy |
Plugin | Easing Slider |
Version | 2.2.0.6 |
Comparing to | |
See all releases |
Code changes from version 2.2.0.5 to 2.2.0.6
- backbone/slide.php +4 -4
- css/easingslider.css +8 -8
- css/easingslider.min.css +1 -1
- easing-slider.php +2 -2
- includes/class-es-customizer.php +2 -2
- includes/class-es-editor-pages.php +2 -2
- includes/class-es-extensions-page.php +1 -1
- includes/class-es-legacy.php +10 -0
- includes/class-es-settings-page.php +1 -1
- includes/class-es-slider.php +4 -4
- includes/class-es-update-manager.php +117 -16
- includes/class-es-welcome-pages.php +1 -1
- includes/helpers.php +3 -3
- js/jquery.easingslider.js +2 -2
- js/jquery.easingslider.min.js +1 -1
- readme.txt +10 -1
backbone/slide.php
CHANGED
@@ -10,17 +10,17 @@
|
|
10 |
<div class="centered">
|
11 |
<# if ( data.attachment && data.attachment.sizes ) { #>
|
12 |
<# var image = data.attachment.sizes.thumbnail || data.attachment.sizes.medium || data.attachment.sizes.large || data.attachment.sizes.full #>
|
13 |
-
<img src="{{ image.url }}" draggable="
|
14 |
<# } else { #>
|
15 |
-
<img src="{{ data.model.url }}" draggable="
|
16 |
<# } #>
|
17 |
</div>
|
18 |
<# } else if ( data.attachment ) { #>
|
19 |
<div class="centered">
|
20 |
<# if ( data.attachment.image && data.attachment.image.src && data.attachment.image.src !== data.attachment.icon ) { #>
|
21 |
-
<img src="{{ data.attachment.image.src }}" class="thumbnail" draggable="
|
22 |
<# } else { #>
|
23 |
-
<img src="{{ data.attachment.icon }}" class="icon" draggable="
|
24 |
<# } #>
|
25 |
</div>
|
26 |
<div class="filename">
|
10 |
<div class="centered">
|
11 |
<# if ( data.attachment && data.attachment.sizes ) { #>
|
12 |
<# var image = data.attachment.sizes.thumbnail || data.attachment.sizes.medium || data.attachment.sizes.large || data.attachment.sizes.full #>
|
13 |
+
<img src="{{ image.url }}" draggable="true" alt="" />
|
14 |
<# } else { #>
|
15 |
+
<img src="{{ data.model.url }}" draggable="true" alt="" />
|
16 |
<# } #>
|
17 |
</div>
|
18 |
<# } else if ( data.attachment ) { #>
|
19 |
<div class="centered">
|
20 |
<# if ( data.attachment.image && data.attachment.image.src && data.attachment.image.src !== data.attachment.icon ) { #>
|
21 |
+
<img src="{{ data.attachment.image.src }}" class="thumbnail" draggable="true" />
|
22 |
<# } else { #>
|
23 |
+
<img src="{{ data.attachment.icon }}" class="icon" draggable="true" />
|
24 |
<# } #>
|
25 |
</div>
|
26 |
<div class="filename">
|
css/easingslider.css
CHANGED
@@ -25,7 +25,7 @@
|
|
25 |
|
26 |
.easingslider {
|
27 |
position: relative !important;
|
28 |
-
z-index:
|
29 |
}
|
30 |
|
31 |
.easingslider.has-loaded .easingslider-arrows,
|
@@ -44,7 +44,7 @@
|
|
44 |
position: absolute !important;
|
45 |
top: 0 !important;
|
46 |
left: 0 !important;
|
47 |
-
z-index:
|
48 |
}
|
49 |
|
50 |
.easingslider-slide {
|
@@ -66,17 +66,17 @@
|
|
66 |
}
|
67 |
|
68 |
.easingslider-slide.active {
|
69 |
-
z-index:
|
70 |
}
|
71 |
|
72 |
.easingslider-slide.next-out,
|
73 |
.easingslider-slide.prev-out {
|
74 |
-
z-index:
|
75 |
}
|
76 |
|
77 |
.easingslider-slide.next-in,
|
78 |
.easingslider-slide.prev-in {
|
79 |
-
z-index:
|
80 |
}
|
81 |
|
82 |
.easingslider-image {
|
@@ -105,7 +105,7 @@
|
|
105 |
width: 30px;
|
106 |
height: 30px;
|
107 |
background-repeat: no-repeat;
|
108 |
-
z-index:
|
109 |
cursor: pointer;
|
110 |
opacity: 0;
|
111 |
-webkit-transition: opacity 0.25s ease;
|
@@ -150,7 +150,7 @@
|
|
150 |
*/
|
151 |
.easingslider-pagination {
|
152 |
position: absolute;
|
153 |
-
z-index:
|
154 |
opacity: 0;
|
155 |
-webkit-transition: opacity 0.25s ease;
|
156 |
-moz-transition: opacity 0.25s ease;
|
@@ -244,7 +244,7 @@
|
|
244 |
display: inline-block;
|
245 |
*display: inline; /** IE7 hack */
|
246 |
zoom: 1; /** IE7 hack */
|
247 |
-
z-index:
|
248 |
cursor: pointer;
|
249 |
}
|
250 |
|
25 |
|
26 |
.easingslider {
|
27 |
position: relative !important;
|
28 |
+
z-index: 0;
|
29 |
}
|
30 |
|
31 |
.easingslider.has-loaded .easingslider-arrows,
|
44 |
position: absolute !important;
|
45 |
top: 0 !important;
|
46 |
left: 0 !important;
|
47 |
+
z-index: 50 !important;
|
48 |
}
|
49 |
|
50 |
.easingslider-slide {
|
66 |
}
|
67 |
|
68 |
.easingslider-slide.active {
|
69 |
+
z-index: 10 !important;
|
70 |
}
|
71 |
|
72 |
.easingslider-slide.next-out,
|
73 |
.easingslider-slide.prev-out {
|
74 |
+
z-index: 20 !important;
|
75 |
}
|
76 |
|
77 |
.easingslider-slide.next-in,
|
78 |
.easingslider-slide.prev-in {
|
79 |
+
z-index: 30 !important;
|
80 |
}
|
81 |
|
82 |
.easingslider-image {
|
105 |
width: 30px;
|
106 |
height: 30px;
|
107 |
background-repeat: no-repeat;
|
108 |
+
z-index: 40;
|
109 |
cursor: pointer;
|
110 |
opacity: 0;
|
111 |
-webkit-transition: opacity 0.25s ease;
|
150 |
*/
|
151 |
.easingslider-pagination {
|
152 |
position: absolute;
|
153 |
+
z-index: 40;
|
154 |
opacity: 0;
|
155 |
-webkit-transition: opacity 0.25s ease;
|
156 |
-moz-transition: opacity 0.25s ease;
|
244 |
display: inline-block;
|
245 |
*display: inline; /** IE7 hack */
|
246 |
zoom: 1; /** IE7 hack */
|
247 |
+
z-index: 40;
|
248 |
cursor: pointer;
|
249 |
}
|
250 |
|
css/easingslider.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.easingslider,.easingslider-image,.easingslider-link,.easingslider-slide,.easingslider-viewport{line-height:0!important;outline:0!important;padding:0!important;margin:0!important}.easingslider-image,.easingslider-link,.easingslider-slide,.easingslider-viewport{clear:none!important;border:0!important}.easingslider{position:relative!important;z-index:
|
1 |
+
.easingslider,.easingslider-image,.easingslider-link,.easingslider-slide,.easingslider-viewport{line-height:0!important;outline:0!important;padding:0!important;margin:0!important}.easingslider-image,.easingslider-link,.easingslider-slide,.easingslider-viewport{clear:none!important;border:0!important}.easingslider{position:relative!important;z-index:0}.easingslider.has-loaded .easingslider-arrows,.easingslider.has-loaded .easingslider-pagination{opacity:1}.easingslider-viewport{position:relative!important}.easingslider-preload{background:url(../images/loading.gif) center center no-repeat #fff!important;width:100%!important;height:100%!important;position:absolute!important;top:0!important;left:0!important;z-index:50!important}.easingslider-slide{display:none;overflow:hidden;position:absolute;top:0;left:0;bottom:0;right:0}.easingslider-slide.active,.easingslider-slide.next-in,.easingslider-slide.next-out,.easingslider-slide.prev-in,.easingslider-slide.prev-out{display:block}.easingslider-slide.active{z-index:10!important}.easingslider-slide.next-out,.easingslider-slide.prev-out{z-index:20!important}.easingslider-slide.next-in,.easingslider-slide.prev-in{z-index:30!important}.easingslider-image{height:auto;width:100%}.easingslider .easingslider-arrows.has-hover,.easingslider .easingslider-pagination.has-hover{opacity:0}.easingslider:hover .easingslider-arrows.has-hover,.easingslider:hover .easingslider-pagination.has-hover{opacity:1}.easingslider-arrows{position:absolute;top:46%;width:30px;height:30px;background-repeat:no-repeat;z-index:40;cursor:pointer;opacity:0;-webkit-transition:opacity .25s ease;-moz-transition:opacity .25s ease;-ms-transition:opacity .25s ease;-o-transition:opacity .25s ease;transition:opacity .25s ease}.easingslider-arrows.easingslider-next{background-image:url(../images/nav-arrow-next.png);background-position:top right}.easingslider-arrows.easingslider-prev{background-image:url(../images/nav-arrow-prev.png);background-position:top left}.easingslider-arrows.easingslider-next.inside{right:10px}.easingslider-arrows.easingslider-next.outside{right:-40px;padding-left:20px}.easingslider-arrows.easingslider-prev.inside{left:10px}.easingslider-arrows.easingslider-prev.outside{left:-40px;padding-right:20px}.easingslider-pagination{position:absolute;z-index:40;opacity:0;-webkit-transition:opacity .25s ease;-moz-transition:opacity .25s ease;-ms-transition:opacity .25s ease;-o-transition:opacity .25s ease;transition:opacity .25s ease}.easingslider-pagination.inside.bottom-left{bottom:10px;left:10px}.easingslider-pagination.inside.bottom-right{bottom:10px;right:10px}.easingslider-pagination.inside.bottom-center{bottom:10px;left:0;width:100%;text-align:center}.easingslider-pagination.inside.top-left{top:10px;left:10px}.easingslider-pagination.inside.top-right{top:10px;right:10px}.easingslider-pagination.inside.top-center{top:10px;left:0;width:100%;text-align:center}.easingslider-pagination.outside.bottom-left{bottom:-25px;left:0;padding-top:20px}.easingslider-pagination.outside.bottom-right{bottom:-25px;right:0;padding-top:20px}.easingslider-pagination.outside.bottom-center{bottom:-25px;left:0;width:100%;text-align:center;padding-top:20px}.easingslider-pagination.outside.top-left{top:-25px;left:0;padding-bottom:20px}.easingslider-pagination.outside.top-right{top:-25px;right:0;padding-bottom:20px}.easingslider-pagination.outside.top-center{top:-25px;left:0;width:100%;text-align:center;padding-bottom:20px}.easingslider-pagination .easingslider-icon{width:15px;height:15px;margin:0;padding:0;background-image:url(../images/nav-icon-inactive.png);background-repeat:no-repeat;background-position:0 0;display:inline-block;zoom:1;z-index:40;cursor:pointer}.easingslider-pagination .easingslider-icon:last-child{margin-right:0}.easingslider-pagination .easingslider-icon.active{background-image:url(../images/nav-icon-active.png)}.easingslider.use-fade .easingslider-slide.next-in,.easingslider.use-fade .easingslider-slide.prev-in{-webkit-animation:fadeIn .3s ease;-moz-animation:fadeIn .3s ease;-ms-animation:fadeIn .3s ease;-o-animation:fadeIn .3s ease;animation:fadeIn .3s ease}._easingslider.use-fade .easingslider-slide.next-out,._easingslider.use-fade .easingslider-slide.prev-out{-webkit-animation:fadeOut .3s ease;-moz-animation:fadeOut .3s ease;-ms-animation:fadeOut .3s ease;-o-animation:fadeOut .3s ease;animation:fadeOut .3s ease}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-moz-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-ms-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-o-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-ms-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-o-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.easingslider.use-slide .easingslider-viewport{overflow:hidden}.easingslider.use-slide .easingslider-slide.next-in{-webkit-animation:slideNextIn .3s ease;-moz-animation:slideNextIn .3s ease;-ms-animation:slideNextIn .3s ease;-o-animation:slideNextIn .3s ease;animation:slideNextIn .3s ease}.easingslider.use-slide .easingslider-slide.next-out{-webkit-animation:slideNextOut .3s ease;-moz-animation:slideNextOut .3s ease;-ms-animation:slideNextOut .3s ease;-o-animation:slideNextOut .3s ease;animation:slideNextOut .3s ease}.easingslider.use-slide .easingslider-slide.prev-out{-webkit-animation:slidePrevOut .3s ease;-moz-animation:slidePrevOut .3s ease;-ms-animation:slidePrevOut .3s ease;-o-animation:slidePrevOut .3s ease;animation:slidePrevOut .3s ease}.easingslider.use-slide .easingslider-slide.prev-in{-webkit-animation:slidePrevIn .3s ease;-moz-animation:slidePrevIn .3s ease;-ms-animation:slidePrevIn .3s ease;-o-animation:slidePrevIn .3s ease;animation:slidePrevIn .3s ease}@-webkit-keyframes slideNextIn{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{-webkit-transform:none;transform:none}}@-moz-keyframes slideNextIn{0%{-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{-moz-transform:none;transform:none}}@-ms-keyframes slideNextIn{0%{-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{-ms-transform:none;transform:none}}@-o-keyframes slideNextIn{0%{-o-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{-o-transform:none;transform:none}}@keyframes slideNextIn{0%{transform:translate3d(100%,0,0)}100%{transform:none}}@-webkit-keyframes slideNextOut{0%{-webkit-transform:none;transform:none}100%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@-moz-keyframes slideNextOut{0%{-moz-transform:none;transform:none}100%{-moz-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@-ms-keyframes slideNextOut{0%{-ms-transform:none;transform:none}100%{-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@-o-keyframes slideNextOut{0%{-o-transform:none;transform:none}100%{-o-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideNextOut{0%{transform:none}100%{transform:translate3d(100%,0,0)}}@-webkit-keyframes slidePrevOut{0%{-webkit-transform:none;transform:none}100%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@-moz-keyframes slidePrevOut{0%{-moz-transform:none;transform:none}100%{-moz-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@-ms-keyframes slidePrevOut{0%{-ms-transform:none;transform:none}100%{-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@-o-keyframes slidePrevOut{0%{-o-transform:none;transform:none}100%{-o-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slidePrevOut{0%{transform:none}100%{transform:translate3d(-100%,0,0)}}@-webkit-keyframes slidePrevIn{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{-webkit-transform:none;transform:none}}@-moz-keyframes slidePrevIn{0%{-moz-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{-moz-transform:none;transform:none}}@-ms-keyframes slidePrevIn{0%{-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{-ms-transform:none;transform:none}}@-o-keyframes slidePrevIn{0%{-o-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{-o-transform:none;transform:none}}@keyframes slidePrevIn{0%{transform:translate3d(-100%,0,0)}100%{transform:none}}
|
easing-slider.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
/*
|
4 |
Plugin Name: Easing Slider
|
5 |
Plugin URI: http://easingslider.com/
|
6 |
-
Version: 2.2.0.
|
7 |
Author: Matthew Ruddy
|
8 |
Author URI: http://matthewruddy.com/
|
9 |
Description: Easing Slider is an easy to use slider plugin for WordPress. Simple, lightweight & designed to get the job done, it allows you to get creating sliders without any difficulty.
|
@@ -53,7 +53,7 @@ class Easing_Slider {
|
|
53 |
*
|
54 |
* @var string
|
55 |
*/
|
56 |
-
public static $version = '2.2.0.
|
57 |
|
58 |
/**
|
59 |
* Our plugin file
|
3 |
/*
|
4 |
Plugin Name: Easing Slider
|
5 |
Plugin URI: http://easingslider.com/
|
6 |
+
Version: 2.2.0.6
|
7 |
Author: Matthew Ruddy
|
8 |
Author URI: http://matthewruddy.com/
|
9 |
Description: Easing Slider is an easy to use slider plugin for WordPress. Simple, lightweight & designed to get the job done, it allows you to get creating sliders without any difficulty.
|
53 |
*
|
54 |
* @var string
|
55 |
*/
|
56 |
+
public static $version = '2.2.0.6';
|
57 |
|
58 |
/**
|
59 |
* Our plugin file
|
includes/class-es-customizer.php
CHANGED
@@ -79,8 +79,8 @@ class ES_Customizer {
|
|
79 |
public function register_assets() {
|
80 |
|
81 |
// Get our directories
|
82 |
-
$css_dir = plugin_dir_url( Easing_Slider::$file ) . '
|
83 |
-
$js_dir = plugin_dir_url( Easing_Slider::$file ) . '
|
84 |
|
85 |
// Get file suffix
|
86 |
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
79 |
public function register_assets() {
|
80 |
|
81 |
// Get our directories
|
82 |
+
$css_dir = plugin_dir_url( Easing_Slider::$file ) . 'css';
|
83 |
+
$js_dir = plugin_dir_url( Easing_Slider::$file ) . 'js';
|
84 |
|
85 |
// Get file suffix
|
86 |
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
includes/class-es-editor-pages.php
CHANGED
@@ -109,8 +109,8 @@ class ES_Editor_Pages {
|
|
109 |
public function register_assets() {
|
110 |
|
111 |
// Get our directories
|
112 |
-
$css_dir = plugin_dir_url( Easing_Slider::$file ) . '
|
113 |
-
$js_dir = plugin_dir_url( Easing_Slider::$file ) . '
|
114 |
|
115 |
// Get file suffix
|
116 |
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
109 |
public function register_assets() {
|
110 |
|
111 |
// Get our directories
|
112 |
+
$css_dir = plugin_dir_url( Easing_Slider::$file ) . 'css';
|
113 |
+
$js_dir = plugin_dir_url( Easing_Slider::$file ) . 'js';
|
114 |
|
115 |
// Get file suffix
|
116 |
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
includes/class-es-extensions-page.php
CHANGED
@@ -75,7 +75,7 @@ class ES_Extensions_Page {
|
|
75 |
public function register_assets() {
|
76 |
|
77 |
// Get our directory
|
78 |
-
$css_dir = plugin_dir_url( Easing_Slider::$file ) . '
|
79 |
|
80 |
// Get file suffix
|
81 |
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
75 |
public function register_assets() {
|
76 |
|
77 |
// Get our directory
|
78 |
+
$css_dir = plugin_dir_url( Easing_Slider::$file ) . 'css';
|
79 |
|
80 |
// Get file suffix
|
81 |
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
includes/class-es-legacy.php
CHANGED
@@ -144,6 +144,11 @@ class ES_Legacy {
|
|
144 |
// Get our "Pro" slider
|
145 |
$pro_slider = $this->get_pro_slider( $legacy_id );
|
146 |
|
|
|
|
|
|
|
|
|
|
|
147 |
return $pro_slider->render();
|
148 |
|
149 |
}
|
@@ -423,6 +428,11 @@ class ES_Legacy {
|
|
423 |
// Get our "Lite" slider
|
424 |
$lite_slider = $this->get_lite_slider();
|
425 |
|
|
|
|
|
|
|
|
|
|
|
426 |
return $lite_slider->render();
|
427 |
|
428 |
}
|
144 |
// Get our "Pro" slider
|
145 |
$pro_slider = $this->get_pro_slider( $legacy_id );
|
146 |
|
147 |
+
// Bail if we don't have a slider
|
148 |
+
if ( ! $pro_slider ) {
|
149 |
+
return;
|
150 |
+
}
|
151 |
+
|
152 |
return $pro_slider->render();
|
153 |
|
154 |
}
|
428 |
// Get our "Lite" slider
|
429 |
$lite_slider = $this->get_lite_slider();
|
430 |
|
431 |
+
// Bail if we don't have a slider
|
432 |
+
if ( ! $lite_slider ) {
|
433 |
+
return;
|
434 |
+
}
|
435 |
+
|
436 |
return $lite_slider->render();
|
437 |
|
438 |
}
|
includes/class-es-settings-page.php
CHANGED
@@ -76,7 +76,7 @@ class ES_Settings_Page {
|
|
76 |
public function register_assets() {
|
77 |
|
78 |
// Get our directory
|
79 |
-
$css_dir = plugin_dir_url( Easing_Slider::$file ) . '
|
80 |
|
81 |
// Get file suffix
|
82 |
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
76 |
public function register_assets() {
|
77 |
|
78 |
// Get our directory
|
79 |
+
$css_dir = plugin_dir_url( Easing_Slider::$file ) . 'css';
|
80 |
|
81 |
// Get file suffix
|
82 |
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
includes/class-es-slider.php
CHANGED
@@ -301,8 +301,8 @@ class ES_Slider {
|
|
301 |
public function register_assets() {
|
302 |
|
303 |
// Get our directories
|
304 |
-
$css_dir = plugin_dir_url( Easing_Slider::$file ) . '
|
305 |
-
$js_dir = plugin_dir_url( Easing_Slider::$file ) . '
|
306 |
|
307 |
// Get file suffix
|
308 |
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
@@ -664,7 +664,7 @@ class ES_Slider {
|
|
664 |
$image_url = apply_filters( 'easingslider_modify_image_url', $image_url, $slider->dimensions->width, $slider->dimensions->height );
|
665 |
|
666 |
// Add the HTML
|
667 |
-
$html .= "<img src=\"{$image_url}\" title=\"{$slide->title}\" class=\"easingslider-image\" />";
|
668 |
|
669 |
return $html;
|
670 |
|
@@ -707,7 +707,7 @@ class ES_Slider {
|
|
707 |
*/
|
708 |
public function close_link( $html, $slide, $slider ) {
|
709 |
|
710 |
-
if (
|
711 |
$html .= "</a>";
|
712 |
}
|
713 |
|
301 |
public function register_assets() {
|
302 |
|
303 |
// Get our directories
|
304 |
+
$css_dir = plugin_dir_url( Easing_Slider::$file ) . 'css';
|
305 |
+
$js_dir = plugin_dir_url( Easing_Slider::$file ) . 'js';
|
306 |
|
307 |
// Get file suffix
|
308 |
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
664 |
$image_url = apply_filters( 'easingslider_modify_image_url', $image_url, $slider->dimensions->width, $slider->dimensions->height );
|
665 |
|
666 |
// Add the HTML
|
667 |
+
$html .= "<img src=\"{$image_url}\" title=\"{$slide->title}\" alt=\"{$slide->alt}\" class=\"easingslider-image\" />";
|
668 |
|
669 |
return $html;
|
670 |
|
707 |
*/
|
708 |
public function close_link( $html, $slide, $slider ) {
|
709 |
|
710 |
+
if ( 'none' != $slide->link ) {
|
711 |
$html .= "</a>";
|
712 |
}
|
713 |
|
includes/class-es-update-manager.php
CHANGED
@@ -9,9 +9,8 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
9 |
|
10 |
/**
|
11 |
* This code is for debugging purposes.
|
12 |
-
* Uncomment
|
13 |
*/
|
14 |
-
// set_transient( 'update_plugins', null );
|
15 |
// set_site_transient( 'update_plugins', null );
|
16 |
|
17 |
/**
|
@@ -28,6 +27,13 @@ class ES_Update_Manager {
|
|
28 |
*/
|
29 |
protected $name;
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
/**
|
32 |
* Plugin slug
|
33 |
*
|
@@ -67,23 +73,28 @@ class ES_Update_Manager {
|
|
67 |
* Constructor
|
68 |
*
|
69 |
* @param array $name The plugin name
|
70 |
-
* @param string $
|
71 |
* @param int $version The plugin version
|
72 |
* @return void
|
73 |
*/
|
74 |
-
public function __construct( $name, $
|
75 |
|
76 |
// Establish variables
|
77 |
$this->name = $name;
|
78 |
-
$this->
|
|
|
79 |
$this->version = $version;
|
80 |
|
|
|
|
|
|
|
|
|
81 |
// Set the license key
|
82 |
$this->set_key();
|
83 |
|
84 |
// Define hooks for this license
|
85 |
$this->define_hooks();
|
86 |
-
|
87 |
}
|
88 |
|
89 |
/**
|
@@ -93,15 +104,26 @@ class ES_Update_Manager {
|
|
93 |
*/
|
94 |
protected function set_key() {
|
95 |
|
96 |
-
//
|
97 |
-
$settings
|
98 |
|
99 |
-
|
100 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
|
102 |
-
// Set the license key if it exists
|
103 |
-
if ( isset( $settings->{$key_index} ) ) {
|
104 |
-
$this->key = $settings->{$key_index};
|
105 |
}
|
106 |
|
107 |
}
|
@@ -116,7 +138,6 @@ class ES_Update_Manager {
|
|
116 |
add_action( 'easingslider_do_settings_actions', array( $this, 'attempt_deactivation' ) );
|
117 |
add_action( 'easingslider_do_settings_actions', array( $this, 'attempt_registration' ) );
|
118 |
add_action( 'easingslider_print_license_fields', array( $this, 'display_license_field' ) );
|
119 |
-
add_filter( 'pre_set_transient_update_plugins', array( $this, 'modify_updates_transient' ) );
|
120 |
add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'modify_updates_transient' ) );
|
121 |
add_filter( 'plugins_api', array( $this, 'get_update_info' ), 10, 3 );
|
122 |
|
@@ -225,7 +246,43 @@ class ES_Update_Manager {
|
|
225 |
* @return array|false
|
226 |
*/
|
227 |
public function get_updates() {
|
228 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
229 |
}
|
230 |
|
231 |
/**
|
@@ -353,6 +410,22 @@ class ES_Update_Manager {
|
|
353 |
*/
|
354 |
public function get_update_info( $res, $action, $args ) {
|
355 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
356 |
return $res;
|
357 |
|
358 |
}
|
@@ -364,7 +437,35 @@ class ES_Update_Manager {
|
|
364 |
* @return object
|
365 |
*/
|
366 |
public function modify_updates_transient( $checked_data ) {
|
367 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
368 |
return $checked_data;
|
369 |
|
370 |
}
|
9 |
|
10 |
/**
|
11 |
* This code is for debugging purposes.
|
12 |
+
* Uncomment this line to force WordPress to check for plugin updates on every page load.
|
13 |
*/
|
|
|
14 |
// set_site_transient( 'update_plugins', null );
|
15 |
|
16 |
/**
|
27 |
*/
|
28 |
protected $name;
|
29 |
|
30 |
+
/**
|
31 |
+
* Plugin file
|
32 |
+
*
|
33 |
+
* @var string
|
34 |
+
*/
|
35 |
+
protected $file;
|
36 |
+
|
37 |
/**
|
38 |
* Plugin slug
|
39 |
*
|
73 |
* Constructor
|
74 |
*
|
75 |
* @param array $name The plugin name
|
76 |
+
* @param string $file The plugin file
|
77 |
* @param int $version The plugin version
|
78 |
* @return void
|
79 |
*/
|
80 |
+
public function __construct( $name, $file, $version ) {
|
81 |
|
82 |
// Establish variables
|
83 |
$this->name = $name;
|
84 |
+
$this->file = $file;
|
85 |
+
$this->slug = basename( $file, '.php' );
|
86 |
$this->version = $version;
|
87 |
|
88 |
+
// Filter variables
|
89 |
+
$this->api_url = apply_filters( 'easingslider_update_manager_api_url', $this->api_url );
|
90 |
+
$this->transient_expiry = apply_filters( 'easingslider_update_manager_transient_expiry', $this->transient_expiry );
|
91 |
+
|
92 |
// Set the license key
|
93 |
$this->set_key();
|
94 |
|
95 |
// Define hooks for this license
|
96 |
$this->define_hooks();
|
97 |
+
|
98 |
}
|
99 |
|
100 |
/**
|
104 |
*/
|
105 |
protected function set_key() {
|
106 |
|
107 |
+
// Check post request for key, otherwise get it from the setting.
|
108 |
+
if ( ! empty( $_POST['settings'] ) && isset( $_POST['settings']["{$this->slug}_license_key"] ) ) {
|
109 |
|
110 |
+
// Set the license key from our request
|
111 |
+
$this->key = $_POST['settings']["{$this->slug}_license_key"];
|
112 |
+
|
113 |
+
}
|
114 |
+
else {
|
115 |
+
|
116 |
+
// Get the settings
|
117 |
+
$settings = get_option( 'easingslider_settings' );
|
118 |
+
|
119 |
+
// Get the license key index
|
120 |
+
$key_index = "{$this->slug}_license_key";
|
121 |
+
|
122 |
+
// Set the license key if it exists
|
123 |
+
if ( isset( $settings->{$key_index} ) ) {
|
124 |
+
$this->key = $settings->{$key_index};
|
125 |
+
}
|
126 |
|
|
|
|
|
|
|
127 |
}
|
128 |
|
129 |
}
|
138 |
add_action( 'easingslider_do_settings_actions', array( $this, 'attempt_deactivation' ) );
|
139 |
add_action( 'easingslider_do_settings_actions', array( $this, 'attempt_registration' ) );
|
140 |
add_action( 'easingslider_print_license_fields', array( $this, 'display_license_field' ) );
|
|
|
141 |
add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'modify_updates_transient' ) );
|
142 |
add_filter( 'plugins_api', array( $this, 'get_update_info' ), 10, 3 );
|
143 |
|
246 |
* @return array|false
|
247 |
*/
|
248 |
public function get_updates() {
|
249 |
+
|
250 |
+
// Make the request
|
251 |
+
$request = wp_remote_post( $this->api_url, array(
|
252 |
+
'timeout' => 10,
|
253 |
+
'body' => array(
|
254 |
+
'action' => 'get_updates',
|
255 |
+
'key' => $this->key,
|
256 |
+
'slug' => $this->slug,
|
257 |
+
'url' => home_url(),
|
258 |
+
'version' => $this->version
|
259 |
+
)
|
260 |
+
) );
|
261 |
+
|
262 |
+
// Get the response headers
|
263 |
+
$headers = (object) wp_remote_retrieve_headers( $request );
|
264 |
+
|
265 |
+
// Get the response body
|
266 |
+
$response = json_decode( wp_remote_retrieve_body( $request ) );
|
267 |
+
|
268 |
+
// Bail if no response was received (service may temporarily be offline)
|
269 |
+
if ( ! isset( $response->response ) ) {
|
270 |
+
return false;
|
271 |
+
}
|
272 |
+
|
273 |
+
// If the status indicates the request wasn't a success, bail and flag invalid license key.
|
274 |
+
if ( 200 != $headers->status ) {
|
275 |
+
|
276 |
+
// Delete the license validation flag
|
277 |
+
delete_option( "{$this->slug}_license_is_valid" );
|
278 |
+
|
279 |
+
return false;
|
280 |
+
|
281 |
+
}
|
282 |
+
|
283 |
+
// Return the updates
|
284 |
+
return $response->response;
|
285 |
+
|
286 |
}
|
287 |
|
288 |
/**
|
410 |
*/
|
411 |
public function get_update_info( $res, $action, $args ) {
|
412 |
|
413 |
+
// Return the plugin information object
|
414 |
+
if ( isset( $args->slug ) && $args->slug == $this->slug ) {
|
415 |
+
|
416 |
+
// Get available update info stored in database
|
417 |
+
$updates = $this->get_updates();
|
418 |
+
|
419 |
+
// Ensure sections are an array (avoids errors)
|
420 |
+
$updates->information->sections = (array) $updates->information->sections;
|
421 |
+
|
422 |
+
// Return information (if it exists)
|
423 |
+
if ( $updates->information ) {
|
424 |
+
return $updates->information;
|
425 |
+
}
|
426 |
+
|
427 |
+
}
|
428 |
+
|
429 |
return $res;
|
430 |
|
431 |
}
|
437 |
* @return object
|
438 |
*/
|
439 |
public function modify_updates_transient( $checked_data ) {
|
440 |
+
|
441 |
+
// Get current updates
|
442 |
+
$updates = $this->get_updates();
|
443 |
+
|
444 |
+
// Bail if false returned
|
445 |
+
if ( ! $updates ) {
|
446 |
+
return $checked_data;
|
447 |
+
}
|
448 |
+
|
449 |
+
// Add our update information
|
450 |
+
if ( empty( $checked_data->response ) OR empty ( $checked_data->response[ $this->slug ] ) ) {
|
451 |
+
|
452 |
+
// Remove plugin's API information (not need for this).
|
453 |
+
unset( $updates->information );
|
454 |
+
|
455 |
+
// Bail if we are using the current version
|
456 |
+
if ( version_compare( $this->version, $updates->new_version, '<' ) ) {
|
457 |
+
|
458 |
+
// Add the update information
|
459 |
+
$checked_data->response[ $this->file ] = $updates;
|
460 |
+
|
461 |
+
}
|
462 |
+
|
463 |
+
// Set last checked timestamp and version
|
464 |
+
$checked_data->last_checked = time();
|
465 |
+
$checked_data->checked[ $this->file ] = $this->version;
|
466 |
+
|
467 |
+
}
|
468 |
+
|
469 |
return $checked_data;
|
470 |
|
471 |
}
|
includes/class-es-welcome-pages.php
CHANGED
@@ -64,7 +64,7 @@ class ES_Welcome_Pages {
|
|
64 |
public function register_assets() {
|
65 |
|
66 |
// Get our directory
|
67 |
-
$css_dir = plugin_dir_url( Easing_Slider::$file ) . '
|
68 |
|
69 |
// Get file suffix
|
70 |
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
64 |
public function register_assets() {
|
65 |
|
66 |
// Get our directory
|
67 |
+
$css_dir = plugin_dir_url( Easing_Slider::$file ) . 'css';
|
68 |
|
69 |
// Get file suffix
|
70 |
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
|
includes/helpers.php
CHANGED
@@ -43,16 +43,16 @@ if ( ! function_exists( 'easingslider' ) ) {
|
|
43 |
* @uses ES_Update_Manager
|
44 |
*
|
45 |
* @param string $name The plugin name
|
46 |
-
* @param string $
|
47 |
* @param int $version The plugin version
|
48 |
* @return ES_Update_Manager
|
49 |
*/
|
50 |
if ( ! function_exists( 'easingslider_register_extension' ) ) {
|
51 |
-
function easingslider_register_extension( $name, $
|
52 |
|
53 |
// Setup updates and licensing
|
54 |
if ( class_exists( 'ES_Update_Manager' ) ) {
|
55 |
-
return new ES_Update_Manager( $name, $
|
56 |
}
|
57 |
|
58 |
}
|
43 |
* @uses ES_Update_Manager
|
44 |
*
|
45 |
* @param string $name The plugin name
|
46 |
+
* @param string $file The plugin file
|
47 |
* @param int $version The plugin version
|
48 |
* @return ES_Update_Manager
|
49 |
*/
|
50 |
if ( ! function_exists( 'easingslider_register_extension' ) ) {
|
51 |
+
function easingslider_register_extension( $name, $file, $version ) {
|
52 |
|
53 |
// Setup updates and licensing
|
54 |
if ( class_exists( 'ES_Update_Manager' ) ) {
|
55 |
+
return new ES_Update_Manager( $name, $file, $version );
|
56 |
}
|
57 |
|
58 |
}
|
js/jquery.easingslider.js
CHANGED
@@ -43,8 +43,8 @@
|
|
43 |
base._setupPagination();
|
44 |
base._setupPlayback();
|
45 |
|
46 |
-
//
|
47 |
-
base.$slides.css({ 'display': '
|
48 |
|
49 |
// Set the current slide
|
50 |
base.$slides.eq(base.current).addClass('active');
|
43 |
base._setupPagination();
|
44 |
base._setupPlayback();
|
45 |
|
46 |
+
// Display slides
|
47 |
+
base.$slides.css({ 'display': 'inline' });
|
48 |
|
49 |
// Set the current slide
|
50 |
base.$slides.eq(base.current).addClass('active');
|
js/jquery.easingslider.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
(function(e){e.EasingSlider=function(t){var n=this,r;n.el=t;n.$el=e(n.el);n.$slides=n.$el.find(".easingslider-slide");n.$arrows=n.$el.find(".easingslider-arrows");n.$next=n.$el.find(".easingslider-next");n.$prev=n.$el.find(".easingslider-prev");n.$pagination=n.$el.find(".easingslider-pagination");n.$icons=n.$el.find(".easingslider-icon");n.$preload=n.$el.find(".easingslider-preload");n.options=r=e.extend({},e.EasingSlider.defaults,e.parseJSON(n.$el.attr("data-options")));n.current=0;n.previous=0;n.count=n.$slides.length;n.width=r.dimensions.width;n.height=r.dimensions.height;n.$el.data("easingslider",n);n.initialize=function(){n._setupArrows();n._setupPagination();n._setupPlayback();n.$slides.css({display:"
|
1 |
+
(function(e){e.EasingSlider=function(t){var n=this,r;n.el=t;n.$el=e(n.el);n.$slides=n.$el.find(".easingslider-slide");n.$arrows=n.$el.find(".easingslider-arrows");n.$next=n.$el.find(".easingslider-next");n.$prev=n.$el.find(".easingslider-prev");n.$pagination=n.$el.find(".easingslider-pagination");n.$icons=n.$el.find(".easingslider-icon");n.$preload=n.$el.find(".easingslider-preload");n.options=r=e.extend({},e.EasingSlider.defaults,e.parseJSON(n.$el.attr("data-options")));n.current=0;n.previous=0;n.count=n.$slides.length;n.width=r.dimensions.width;n.height=r.dimensions.height;n.$el.data("easingslider",n);n.initialize=function(){n._setupArrows();n._setupPagination();n._setupPlayback();n.$slides.css({display:"inline"});n.$slides.eq(n.current).addClass("active");n._preload();n.$el.trigger("init",n);return n};n._setupArrows=function(){n.$next.on("click",n.nextSlide);n.$prev.on("click",n.prevSlide);if(r.navigation.arrows_hover){n.$arrows.addClass("has-hover")}n.$arrows.css({display:"block"});return n};n._setupPagination=function(){n.$el.on("load",n._updatePagination);n.$el.on("transition.before",n._updatePagination);n.$icons.on("click",function(){var t=e(this).index(),r=t>n.current?"forward":"backward";n.goToSlide(t,r)});if(r.navigation.pagination_hover){n.$pagination.addClass("has-hover")}n.$pagination.css({display:"block"});return n};n._updatePagination=function(){if(!r.navigation.pagination){return n}n.$icons.removeClass("active").eq(n.current).addClass("active");return n};n._setupPlayback=function(){n.$el.on("transition.before",function(){if(r.playback.enabled){n.pausePlayback()}});n.$el.on("transition.after",function(){if(r.playback.enabled){n.startPlayback()}});if(r.playback.enabled){n.$el.on("load",n.startPlayback)}return n};n._preload=function(){n._preloadCount=0;n.$el.find(".easingslider-image").each(function(e,t){preloadImage=new Image;preloadImage.onload=n._load;preloadImage.onerror=n._load;preloadImage.src=t.src})};n._load=function(){n._preloadCount++;if(n._preloadCount==n.count){n.$preload.animate({opacity:0},{duration:400,complete:function(){e(this).remove();n.$el.addClass("has-loaded");n.$el.trigger("load",n)}})}},n.startPlayback=function(){r.playback.enabled=true;n._runtime=new Date;n._pauseTime=r.playback.pause;n._playbackTimer=setTimeout(function(){n.nextSlide()},n._pauseTime);n.$el.trigger("playback.start",n);return n};n.endPlayback=function(){r.playback.enabled=false;clearTimeout(n._playbackTimer);n.$el.trigger("playback.end",n);return n};n.pausePlayback=function(){clearTimeout(n._playbackTimer);n._runtime=Math.ceil(new Date-n._runtime);n.$el.trigger("playback.pause",n);return n};n.resumePlayback=function(){n._pauseTime=Math.ceil(n._pauseTime-n._runtime);n._runtime=new Date;n._playbackTimer=setTimeout(function(){n.nextSlide()},n._pauseTime);n.$el.trigger("playback.resume",n);return n};n._transition=function(e,t){if(n.$slides.eq(e).length==0){return n}if(n._animating){return n}n._animating=true;n.previous=n.current;n.current=e;if("backward"==t){n.$slides.eq(n.previous).addClass("next-out");n.$slides.eq(n.current).addClass("prev-in")}else{n.$slides.eq(n.previous).addClass("prev-out");n.$slides.eq(n.current).addClass("next-in")}clearTimeout(n._cleanup);n._cleanup=setTimeout(function(){n.$slides.eq(n.current).addClass("active");n.$slides.eq(n.previous).removeClass("active");n.$slides.removeClass("next-in next-out prev-in prev-out");n._animating=false;n.$el.trigger("transition.after",n,e,t)},r.transitions.duration);n.$el.trigger("transition.before",n,e,t);return n};n.nextSlide=function(){var e=n.current==n.count-1?0:n.current+1;n._transition(e,"forward");n.$el.trigger("transition.next",n,e,"forward");return n};n.prevSlide=function(){var e=n.current==0?n.count-1:n.current-1;n._transition(e,"backward");n.$el.trigger("transition.prev",n,e,"backward");return n};n.goToSlide=function(e,t){this._transition(e,t);n.$el.trigger("transition.to",n,e,t);return n};n.initialize()};e.EasingSlider.defaults={dimensions:{width:640,height:400,responsive:true},transitions:{effect:"fade",duration:400},navigation:{arrows:true,arrows_hover:true,arrows_position:"inside",pagination:true,pagination_hover:true,pagination_position:"inside",pagination_location:"bottom-center"},playback:{enabled:true,pause:4e3}};e.fn.EasingSlider=function(){return this.each(function(){new e.EasingSlider(this)})};e(document).ready(function(){e(".easingslider").EasingSlider()})})(jQuery)
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Contributors: MatthewRuddy
|
|
4 |
Tags: slideshow, slider, slides, slide, gallery, images, image, responsive, mobile, jquery, javascript, featured, content
|
5 |
Requires at least: 4.0
|
6 |
Tested up to: 4.2
|
7 |
-
Stable tag: 2.2.0.
|
8 |
|
9 |
Easing Slider is an easy to use slider plugin. Simple and lightweight, is makes creating beautiful WordPress sliders a breeze.
|
10 |
|
@@ -73,6 +73,15 @@ This is easy. When editing a slider in the "All Sliders" admin area, simply clic
|
|
73 |
|
74 |
== Changelog ==
|
75 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
= 2.2.0.5 =
|
77 |
* Fixed bug that prevented CSS and Javascripts from loading in certain circumstances.
|
78 |
|
4 |
Tags: slideshow, slider, slides, slide, gallery, images, image, responsive, mobile, jquery, javascript, featured, content
|
5 |
Requires at least: 4.0
|
6 |
Tested up to: 4.2
|
7 |
+
Stable tag: 2.2.0.6
|
8 |
|
9 |
Easing Slider is an easy to use slider plugin. Simple and lightweight, is makes creating beautiful WordPress sliders a breeze.
|
10 |
|
73 |
|
74 |
== Changelog ==
|
75 |
|
76 |
+
= 2.2.0.6 =
|
77 |
+
* Fixed z-index bug with dropdown menus in multiple themes.
|
78 |
+
* Update manager is now fully working and querying extension updates correctly.
|
79 |
+
* Fixed issue that caused slides to show up beneath transparent PNG's.
|
80 |
+
* Fixed error displayed when trying to using the Easing Slider 'Lite' shortcode after deleting the "Lite" slider.
|
81 |
+
* Fixed license key deactivation bug.
|
82 |
+
* Added alt text attribute to images, which was missing previously.
|
83 |
+
* Fixed double slashing bug with stylesheets and scripts.
|
84 |
+
|
85 |
= 2.2.0.5 =
|
86 |
* Fixed bug that prevented CSS and Javascripts from loading in certain circumstances.
|
87 |
|