PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.5.2
Jetpack – WP Security, Backup, Speed, & Growth v13.5.2
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 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 / widgets / gallery / js / admin.js
jetpack / modules / widgets / gallery / js Last commit date
admin.js 6 years ago gallery.js 6 years ago
admin.js
236 lines
1 /* global _wpMediaViewsL10n, _wpGalleryWidgetAdminSettings */
2
3 ( function ( $ ) {
4 var $ids;
5 var $thumbs;
6
7 $( function () {
8 $( document.body ).on( 'click', '.gallery-widget-choose-images', function ( event ) {
9 event.preventDefault();
10
11 var widget_form = $( this ).closest( 'form, .form' );
12
13 $ids = widget_form.find( '.gallery-widget-ids' );
14 $thumbs = widget_form.find( '.gallery-widget-thumbs' );
15
16 var idsString = $ids.val();
17
18 var attachments = getAttachments( idsString );
19
20 var selection = null;
21 var editing = false;
22
23 if ( attachments ) {
24 selection = getSelection( attachments );
25
26 editing = true;
27 }
28
29 var options = {
30 state: 'gallery-edit',
31 title: wp.media.view.l10n.addMedia,
32 multiple: true,
33 editing: editing,
34 selection: selection,
35 };
36
37 var workflow = getWorkflow( options );
38
39 workflow.open();
40 } );
41
42 // Setup an onchange handler to toggle various options when changing style. The different style options
43 // require different form inputs to be presented in the widget; this event will keep the UI in sync
44 // with the selected style
45 $( '.widget-inside' ).on( 'change', '.gallery-widget-style', setupStyleOptions );
46
47 // Setup the Link To options for all forms currently on the page. Does the same as the onChange handler, but
48 // is called once to display the correct form inputs for each widget on the page
49 setupStyleOptions();
50 } );
51
52 var media = wp.media,
53 l10n;
54
55 // Link any localized strings.
56 l10n = media.view.l10n = typeof _wpMediaViewsL10n === 'undefined' ? {} : _wpMediaViewsL10n;
57
58 /**
59 * wp.media.view.MediaFrame.GalleryWidget
60 *
61 * This behavior can be very nearly had by setting the workflow's state to 'gallery-edit', but
62 * we cannot use the custom WidgetGalleryEdit controller with it (must overide createStates(),
63 * which is necessary to disable the sidebar gallery settings in the media browser)
64 */
65 media.view.MediaFrame.GalleryWidget = media.view.MediaFrame.Post.extend( {
66 createStates: function () {
67 var options = this.options;
68
69 // `CollectionEdit` and `CollectionAdd` were only introduced in r27214-core,
70 // so they may not be available yet.
71 if ( 'CollectionEdit' in media.controller ) {
72 this.states.add( [
73 new media.controller.CollectionEdit( {
74 type: 'image',
75 collectionType: 'gallery',
76 title: l10n.editGalleryTitle,
77 SettingsView: media.view.Settings.Gallery,
78 library: options.selection,
79 editing: options.editing,
80 menu: 'gallery',
81 } ),
82 new media.controller.CollectionAdd( {
83 type: 'image',
84 collectionType: 'gallery',
85 title: l10n.addToGalleryTitle,
86 } ),
87 ] );
88 } else {
89 // If `CollectionEdit` is not available, then use the old approach.
90
91 if ( ! ( 'WidgetGalleryEdit' in media.controller ) ) {
92 // Remove the gallery settings sidebar when editing widgets.
93 media.controller.WidgetGalleryEdit = media.controller.GalleryEdit.extend( {
94 gallerySettings: function (/*browser*/) {
95 return;
96 },
97 } );
98 }
99
100 this.states.add( [
101 new media.controller.WidgetGalleryEdit( {
102 library: options.selection,
103 editing: options.editing,
104 menu: 'gallery',
105 } ),
106 new media.controller.GalleryAdd( {} ),
107 ] );
108 }
109 },
110 } );
111
112 function setupStyleOptions() {
113 $( '.widget-inside .gallery-widget-style' ).each( function (/*i*/) {
114 var style = $( this ).val();
115
116 var form = $( this ).parents( 'form' );
117
118 switch ( style ) {
119 case 'slideshow':
120 form.find( '.gallery-widget-link-wrapper' ).hide();
121 form.find( '.gallery-widget-columns-wrapper' ).hide();
122
123 break;
124
125 default:
126 form.find( '.gallery-widget-link-wrapper' ).show();
127 form.find( '.gallery-widget-columns-wrapper' ).show();
128 }
129 } );
130 }
131
132 /**
133 * Take a given Selection of attachments and a thumbs wrapper div (jQuery object)
134 * and fill it with thumbnails
135 */
136 function setupThumbs( selection, wrapper ) {
137 wrapper.empty();
138
139 var imageSize = _wpGalleryWidgetAdminSettings.thumbSize;
140
141 selection.each( function ( model ) {
142 var sizedUrl = model.get( 'url' ) + '?w=' + imageSize + '&h=' + imageSize + '&crop=true';
143
144 var thumb = jQuery( '<img>', {
145 src: sizedUrl,
146 alt: model.get( 'title' ),
147 title: model.get( 'title' ),
148 width: imageSize,
149 height: imageSize,
150 class: 'thumb',
151 } );
152
153 wrapper.append( thumb );
154 } );
155 }
156
157 /**
158 * Take a csv string of ids (as stored in db) and fetch a full Attachments collection
159 */
160 function getAttachments( idsString ) {
161 if ( ! idsString ) {
162 return null;
163 }
164
165 // Found in /wp-includes/js/media-editor.js
166 var shortcode = wp.shortcode.next( 'gallery', '[gallery ids="' + idsString + '"]' );
167
168 // Ignore the rest of the match object, to give attachments() below what it expects
169 shortcode = shortcode.shortcode;
170
171 var attachments = wp.media.gallery.attachments( shortcode );
172
173 return attachments;
174 }
175
176 /**
177 * Take an Attachments collection and return a corresponding Selection model that can be
178 * passed to a MediaFrame to prepopulate the gallery picker
179 */
180 function getSelection( attachments ) {
181 var selection = new wp.media.model.Selection( attachments.models, {
182 props: attachments.props.toJSON(),
183 multiple: true,
184 } );
185
186 selection.gallery = attachments.gallery;
187
188 // Fetch the query's attachments, and then break ties from the
189 // query to allow for sorting.
190 selection.more().done( function () {
191 // Break ties with the query.
192 selection.props.set( { query: false } );
193 selection.unmirror();
194 selection.props.unset( 'orderby' );
195 } );
196
197 return selection;
198 }
199
200 /**
201 * Create a media 'workflow' (MediaFrame). This is the main entry point for the media picker
202 */
203 function getWorkflow( options ) {
204 var workflow = new wp.media.view.MediaFrame.GalleryWidget( options );
205
206 workflow.on(
207 'update',
208 function ( selection ) {
209 var state = workflow.state();
210
211 selection = selection || state.get( 'selection' );
212
213 if ( ! selection ) {
214 return;
215 }
216
217 // Map the Models down into a simple array of ids that can be easily imploded to a csv string
218 var ids = selection.map( function ( model ) {
219 return model.get( 'id' );
220 } );
221
222 var id_string = ids.join( ',' );
223
224 $ids.val( id_string ).trigger( 'change' );
225
226 setupThumbs( selection, $thumbs );
227 },
228 this
229 );
230
231 workflow.setState( workflow.options.state );
232
233 return workflow;
234 }
235 } )( jQuery );
236