PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / shortcodes / js / main.js
jetpack / modules / shortcodes / js Last commit date
brightcove.js 5 years ago dependencies.js 7 months ago main.js 7 months ago quiz.js 4 years ago recipes.js 5 years ago slideshow-shortcode.js 7 months ago
main.js
259 lines
1 ( function ( $ ) {
2 var jmpressOpts = {
3 fullscreen: false,
4 hash: { use: false },
5 mouse: { clickSelects: false },
6 keyboard: { use: true },
7 animation: { transitionDuration: '1s' },
8 presentationMode: false,
9 stepSelector: '.step',
10 duration: {
11 defaultValue: 0,
12 },
13 };
14
15 /**
16 * Presentation constructor
17 */
18 function Presentation( wrapper ) {
19 var _self, duration, new_css, ie_regex, matches;
20
21 _self = this;
22
23 _self.wrapper = $( wrapper ); // The wrapper for toggling fullscreen
24 _self.slideshow = $( '.presentation', wrapper ); // Holds the slides for jmpress
25 _self.navLeft = $( '.nav-arrow-left', wrapper );
26 _self.navRight = $( '.nav-arrow-right', wrapper );
27 _self.expandButton = $( '.nav-fullscreen-button', wrapper );
28 _self.overlay = $( '.autoplay-overlay', wrapper );
29 _self.fullscreen = false;
30 _self.autoPlaying = false;
31 _self.autoplayTime = parseFloat( _self.slideshow.attr( 'data-autoplay' ), 10 ) || 0;
32
33 // The wrapper is scaled to the contents' size so that its border wraps tightly
34 _self.wrapper.css( {
35 width: _self.slideshow.width(),
36 height: _self.slideshow.height(),
37 } );
38
39 duration = _self.slideshow.attr( 'duration' ) || '1s';
40 jmpressOpts.animation.transitionDuration = duration;
41
42 // Compensate for transition times
43 if ( _self.autoplayTime ) {
44 _self.autoplayTime += parseFloat( duration, 10 ) * 1000;
45 }
46
47 // Set the opacity transition duration
48 // as it is delegated by css and not jmpress
49 duration = 'opacity ' + duration;
50 new_css = {
51 width: _self.slideshow.width(),
52 height: _self.slideshow.height(),
53 '-webkit-transition': duration,
54 '-moz-transition': duration,
55 '-ms-transition': duration,
56 '-o-transition': duration,
57 transition: duration,
58 };
59
60 $( '.step', _self.slideshow ).each( function ( i, step ) {
61 $( step ).css( new_css );
62 } );
63
64 // Apply attribute to allow fading individual bullets here,
65 // otherwise wp_kses will strip the attribute out
66 $( '.step.fadebullets li', _self.slideshow ).each( function ( i, step ) {
67 $( step ).attr( 'data-jmpress', 'fade' );
68 } );
69
70 // Register resizing to window when fullscreen
71 $( window ).resize( function () {
72 if ( _self.fullscreen ) {
73 _self.resizePresentation();
74 }
75 } );
76
77 // Register the nav bars to move the slides
78 _self.navLeft.on( 'click', function () {
79 _self.slideshow.jmpress( 'prev' );
80 _self.overlay.css( 'opacity', 0 );
81 return false;
82 } );
83
84 _self.navRight.on( 'click', function () {
85 _self.slideshow.jmpress( 'next' );
86 _self.overlay.css( 'opacity', 0 );
87 return false;
88 } );
89
90 _self.slideshow.on( 'click', function () {
91 _self.setAutoplay( true );
92 return false;
93 } );
94
95 _self.slideshow.on( 'focusout', function () {
96 _self.setAutoplay( false );
97 } );
98
99 // Register toggling fullscreen except for IE 9 or lower
100 ie_regex = /MSIE\s(\d+)\.\d+/;
101 matches = ie_regex.exec( navigator.userAgent );
102
103 if ( matches && parseInt( matches[ 1 ], 10 ) < 10 ) {
104 _self.expandButton.remove();
105 _self.expandButton = null;
106 } else {
107 _self.expandButton.on( 'click', function () {
108 _self.setFullscreen( ! _self.fullscreen );
109 return false;
110 } );
111 }
112
113 // Register ESC key to exit fullscreen
114 $( window ).on( 'keydown', function ( event ) {
115 if ( event.which === 27 ) {
116 _self.setFullscreen( false );
117 }
118 } );
119
120 // Start the presentation
121 _self.slideshow.jmpress( jmpressOpts );
122
123 // Make content visible and remove error message on jmpress success
124 if ( _self.slideshow.jmpress( 'initialized' ) ) {
125 _self.slideshow.css( 'display', '' );
126 _self.overlay.css( 'display', '' );
127 $( '.not-supported-msg', _self.wrapper ).remove();
128 }
129
130 // A bug in Firefox causes issues with the nav arrows appearing
131 // on hover in presentation mode. Explicitly disabling fullscreen
132 // on init seems to fix the issue
133 _self.setFullscreen( false );
134 }
135
136 $.extend( Presentation.prototype, {
137 resizePresentation: function () {
138 var scale, duration, settings, new_css, widthScale, heightScale;
139
140 // Set the animation duration to 0 during resizing
141 // so that there isn't an animation delay when scaling
142 // up the slide contents
143 settings = this.slideshow.jmpress( 'settings' );
144 duration = settings.animation.transitionDuration;
145
146 settings.animation.transitionDuration = '0s';
147 this.slideshow.jmpress( 'reselect' );
148
149 scale = 1;
150 new_css = {
151 top: 0,
152 left: 0,
153 zoom: 1,
154 };
155
156 // Expand the presentation to fill the lesser of the max width or height
157 // This avoids content moving past the window for certain window sizes
158 if ( this.fullscreen ) {
159 widthScale = $( window ).width() / this.slideshow.width();
160 heightScale = $( window ).height() / this.slideshow.height();
161
162 scale = Math.min( widthScale, heightScale );
163
164 new_css.top = ( $( window ).height() - scale * this.slideshow.height() ) / 2;
165 new_css.left = ( $( window ).width() - scale * this.slideshow.width() ) / 2;
166 }
167
168 // Firefox does not support the zoom property; IE does, but it does not work
169 // well like in webkit, so we manually transform and position the slideshow
170 if ( this.slideshow.css( '-moz-transform' ) || this.slideshow.css( '-ms-transform' ) ) {
171 // Firefox keeps the center of the element in place and expands outward
172 // so we must shift everything to compensate
173 new_css.top += ( ( scale - 1 ) * this.slideshow.height() ) / 2;
174 new_css.left += ( ( scale - 1 ) * this.slideshow.width() ) / 2;
175
176 scale = 'scale(' + scale + ')';
177
178 $.extend( new_css, {
179 '-moz-transform': scale,
180 '-ms-transform': scale,
181 transform: scale,
182 } );
183 } else {
184 // webkit scales everything with zoom so we need to offset the right amount
185 // so that the content is vertically centered after scaling effects
186 new_css.top /= scale;
187 new_css.left /= scale;
188 new_css.zoom = scale;
189 }
190
191 this.slideshow.css( new_css );
192
193 settings.animation.transitionDuration = duration;
194 this.slideshow.jmpress( 'reselect' );
195 },
196
197 setFullscreen: function ( on ) {
198 this.fullscreen = on;
199 this.setAutoplay( false );
200
201 // Save the scroll positions before going into fullscreen mode
202 if ( on ) {
203 this.scrollVert = $( window ).scrollTop();
204 this.scrollHoriz = $( window ).scrollLeft();
205
206 // Chrome Bug: Force scroll to be at top
207 // otherwise the presentation can end up offscreen
208 $( window ).scrollTop( 0 );
209 $( window ).scrollLeft( 0 );
210 }
211
212 $( 'html' ).toggleClass( 'presentation-global-fullscreen', on );
213 $( 'body' ).toggleClass( 'presentation-global-fullscreen', on );
214
215 this.wrapper.toggleClass( 'presentation-wrapper-fullscreen', on );
216
217 this.wrapper.parents().each( function ( i, e ) {
218 $( e ).toggleClass( 'presentation-wrapper-fullscreen-parent', on );
219 } );
220
221 this.resizePresentation();
222
223 // Reset the scroll positions after exiting fullscreen mode
224 if ( ! on ) {
225 $( window ).scrollTop( this.scrollVert );
226 $( window ).scrollLeft( this.scrollHoriz );
227 }
228 },
229
230 setAutoplay: function ( on ) {
231 var _self = this,
232 newAutoplayTime;
233
234 if ( _self.autoPlaying === on ) {
235 return;
236 }
237
238 newAutoplayTime = on && _self.autoplayTime > 0 ? _self.autoplayTime : 0;
239 _self.slideshow.jmpress( 'settings' ).duration.defaultValue = newAutoplayTime;
240
241 // Move to the next slide when activating autoplay
242 if ( newAutoplayTime ) {
243 _self.slideshow.jmpress( 'next' );
244 _self.overlay.css( 'opacity', 0 );
245 } else {
246 _self.slideshow.jmpress( 'reselect' );
247 }
248
249 _self.autoPlaying = on;
250 },
251 } );
252
253 addEventListener( 'DOMContentLoaded', () => {
254 document.querySelectorAll( '.presentation-wrapper' ).forEach( el => {
255 new Presentation( el );
256 } );
257 } );
258 } )( jQuery );
259