PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 9.0.4
Jetpack – WP Security, Backup, Speed, & Growth v9.0.4
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 / _inc / jquery.jetpack-resize.js
jetpack / _inc Last commit date
blocks 5 years ago build 5 years ago fonts 8 years ago genericons 6 years ago lib 5 years ago social-logos 5 years ago accessible-focus.js 5 years ago class.jetpack-provision.php 6 years ago connect-button.js 5 years ago crowdsignal-shortcode.js 5 years ago crowdsignal-survey.js 5 years ago facebook-embed.js 5 years ago footer.php 7 years ago gallery-settings.js 5 years ago genericons.php 11 years ago header.php 7 years ago idc-notice.js 5 years ago jetpack-admin.js 5 years ago jetpack-connection-banner.js 5 years ago jetpack-deactivate-dialog.js 5 years ago jetpack-jitm.js 5 years ago jetpack-modules.js 5 years ago jetpack-modules.models.js 6 years ago jetpack-modules.views.js 5 years ago jetpack-server-sandbox.php 6 years ago jetpack-wizard-banner.js 5 years ago jquery.jetpack-resize.js 5 years ago polldaddy-shortcode.js 5 years ago postmessage.js 8 years ago social-logos.php 6 years ago twitter-timeline.js 5 years ago
jquery.jetpack-resize.js
291 lines
1 /* global Jetpack, JSON */
2 /**
3 * Resizeable Iframes.
4 *
5 * Start listening to resize postMessage events for selected iframes:
6 * $( selector ).Jetpack( 'resizeable' );
7 * - OR -
8 * Jetpack.resizeable( 'on', context );
9 *
10 * Resize selected iframes:
11 * $( selector ).Jetpack( 'resizeable', 'resize', { width: 100, height: 200 } );
12 * - OR -
13 * Jetpack.resizeable( 'resize', { width: 100, height: 200 }, context );
14 *
15 * Stop listening to resize postMessage events for selected iframes:
16 * $( selector ).Jetpack( 'resizeable', 'off' );
17 * - OR -
18 * Jetpack.resizeable( 'off', context );
19 *
20 * Stop listening to all resize postMessage events:
21 * Jetpack.resizeable( 'off' );
22 */
23 ( function ( $ ) {
24 var listening = false, // Are we listening for resize postMessage events
25 sourceOrigins = [], // What origins are allowed to send resize postMessage events
26 $sources = false, // What iframe elements are we tracking resize postMessage events from
27 URLtoOrigin, // Utility to convert URLs into origins
28 setupListener, // Binds global resize postMessage event handler
29 destroyListener, // Unbinds global resize postMessage event handler
30 methods; // Jetpack.resizeable methods
31
32 // Setup the Jetpack global
33 if ( 'undefined' === typeof window.Jetpack ) {
34 window.Jetpack = {
35 /**
36 * Handles the two different calling methods:
37 * $( selector ).Jetpack( 'namespace', 'method', context ) // here, context is optional and is used to filter the collection
38 * - vs. -
39 * Jetpack.namespace( 'method', context ) // here context defines the collection
40 *
41 * @internal
42 *
43 * Call as: Jetpack.getTarget.call( this, context )
44 *
45 * @param string context: jQuery selector
46 * @return jQuery|undefined object on which to perform operations or undefined when context cannot be determined
47 */
48 getTarget: function ( context ) {
49 if ( this instanceof jQuery ) {
50 return context ? this.filter( context ) : this;
51 }
52
53 return context ? $( context ) : context;
54 },
55 };
56 }
57
58 // Setup the Jetpack jQuery method
59 if ( 'undefined' === typeof $.fn.Jetpack ) {
60 /**
61 * Dispatches calls to the correct namespace
62 *
63 * @param string namespace
64 * @param ...
65 * @return mixed|jQuery (chainable)
66 */
67 $.fn.Jetpack = function ( namespace ) {
68 if ( 'function' === typeof Jetpack[ namespace ] ) {
69 // Send the call to the correct Jetpack.namespace
70 return Jetpack[ namespace ].apply( this, Array.prototype.slice.call( arguments, 1 ) );
71 } else {
72 $.error( 'Namespace "' + namespace + '" does not exist on jQuery.Jetpack' );
73 }
74 };
75 }
76
77 // Define Jetpack.resizeable() namespace to just always bail if no postMessage
78 if ( 'function' !== typeof window.postMessage ) {
79 $.extend( window.Jetpack, {
80 /**
81 * Defines the Jetpack.resizeable() namespace.
82 * See below for non-trivial definition for browsers with postMessage.
83 */
84 resizeable: function () {
85 $.error( 'Browser does not support window.postMessage' );
86 },
87 } );
88
89 return;
90 }
91
92 /**
93 * Utility to convert URLs into origins
94 *
95 * http://example.com:port/path?query#fragment -> http://example.com:port
96 *
97 * @param string URL
98 * @return string origin
99 */
100 URLtoOrigin = function ( URL ) {
101 if ( ! URL.match( /^https?:\/\// ) ) {
102 URL = document.location.href;
103 }
104 return URL.split( '/' ).slice( 0, 3 ).join( '/' );
105 };
106
107 /**
108 * Binds global resize postMessage event handler
109 */
110 setupListener = function () {
111 listening = true;
112
113 $( window ).on( 'message.JetpackResizeableIframe', function ( e ) {
114 var event = e.originalEvent,
115 data;
116
117 // Ensure origin is allowed
118 if ( -1 === $.inArray( event.origin, sourceOrigins ) ) {
119 return;
120 }
121
122 // Some browsers send structured data, some send JSON strings
123 if ( 'object' === typeof event.data ) {
124 data = event.data.data;
125 } else {
126 try {
127 data = JSON.parse( event.data );
128 } catch ( err ) {
129 data = false;
130 }
131 }
132
133 if ( ! data.data ) {
134 return;
135 }
136
137 // Un-nest
138 data = data.data;
139
140 // Is it a resize event?
141 if ( 'undefined' === typeof data.action || 'resize' !== data.action ) {
142 return;
143 }
144
145 // Find the correct iframe and resize it
146 $sources
147 .filter( function () {
148 if ( 'undefined' !== typeof data.name ) {
149 return this.name === data.name;
150 } else {
151 return event.source === this.contentWindow;
152 }
153 } )
154 .first()
155 .Jetpack( 'resizeable', 'resize', data );
156 } );
157 };
158
159 /**
160 * Unbinds global resize postMessage event handler
161 */
162 destroyListener = function () {
163 listening = false;
164 $( window ).off( 'message.JetpackResizeableIframe' );
165
166 sourceOrigins = [];
167 $( '.jetpack-resizeable' ).removeClass( 'jetpack-resizeable' );
168 $sources = false;
169 };
170
171 // Methods for Jetpack.resizeable() namespace
172 methods = {
173 /**
174 * Start listening for resize postMessage events on the given iframes
175 *
176 * Call statically as: Jetpack.resizeable( 'on', context )
177 * Call as: $( selector ).Jetpack( 'resizeable', 'on', context ) // context optional: used to filter the collectino
178 *
179 * @param string context jQuery selector.
180 * @return jQuery (chainable)
181 */
182 on: function ( context ) {
183 var target = Jetpack.getTarget.call( this, context );
184
185 if ( ! listening ) {
186 setupListener();
187 }
188
189 target
190 .each( function () {
191 sourceOrigins.push( URLtoOrigin( $( this ).attr( 'src' ) ) );
192 } )
193 .addClass( 'jetpack-resizeable' );
194
195 $sources = $( '.jetpack-resizeable' );
196
197 return target;
198 },
199
200 /**
201 * Stop listening for resize postMessage events on the given iframes
202 *
203 * Call statically as: Jetpack.resizeable( 'off', context )
204 * Call as: $( selector ).Jetpack( 'resizeable', 'off', context ) // context optional: used to filter the collectino
205 *
206 * @param string context jQuery selector
207 * @return jQuery (chainable)
208 */
209 off: function ( context ) {
210 var target = Jetpack.getTarget.call( this, context );
211
212 if ( 'undefined' === typeof target ) {
213 destroyListener();
214
215 return target;
216 }
217
218 target
219 .each( function () {
220 var origin = URLtoOrigin( $( this ).attr( 'src' ) ),
221 pos = $.inArray( origin, sourceOrigins );
222
223 if ( -1 !== pos ) {
224 sourceOrigins.splice( pos, 1 );
225 }
226 } )
227 .removeClass( 'jetpack-resizeable' );
228
229 $sources = $( '.jetpack-resizeable' );
230
231 return target;
232 },
233
234 /**
235 * Resize the given iframes
236 *
237 * Call statically as: Jetpack.resizeable( 'resize', dimensions, context )
238 * Call as: $( selector ).Jetpack( 'resizeable', 'resize', dimensions, context ) // context optional: used to filter the collectino
239 *
240 * @param object dimensions in pixels: { width: (int), height: (int) }
241 * @param string context jQuery selector
242 * @return jQuery (chainable)
243 */
244 resize: function ( dimensions, context ) {
245 var target = Jetpack.getTarget.call( this, context );
246
247 $.each( [ 'width', 'height' ], function ( i, variable ) {
248 var value = 0,
249 container;
250 if ( 'undefined' !== typeof dimensions[ variable ] ) {
251 value = parseInt( dimensions[ variable ], 10 );
252 }
253
254 if ( 0 !== value ) {
255 target[ variable ]( value );
256 container = target.parent();
257 if ( container.hasClass( 'slim-likes-widget' ) ) {
258 container[ variable ]( value );
259 }
260 }
261 } );
262
263 return target;
264 },
265 };
266
267 // Define Jetpack.resizeable() namespace
268 $.extend( window.Jetpack, {
269 /**
270 * Defines the Jetpack.resizeable() namespace.
271 * See above for trivial definition for browsers with no postMessage.
272 *
273 * @param string method
274 * @param ...
275 * @return mixed|jQuery (chainable)
276 */
277 resizeable: function ( method ) {
278 if ( methods[ method ] ) {
279 // Send the call to the correct Jetpack.resizeable() method
280 return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ) );
281 } else if ( ! method ) {
282 // By default, send to Jetpack.resizeable( 'on' ), which isn't useful in that form but is when called as
283 // jQuery( selector ).Jetpack( 'resizeable' )
284 return methods.on.apply( this );
285 } else {
286 $.error( 'Method ' + method + ' does not exist on Jetpack.resizeable' );
287 }
288 },
289 } );
290 } )( jQuery );
291