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 / widgets / gallery / js / admin.js
jetpack / modules / widgets / gallery / js Last commit date
admin.js 1 year ago gallery.js 1 year ago
admin.js
234 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 } );
96 }
97
98 this.states.add( [
99 new media.controller.WidgetGalleryEdit( {
100 library: options.selection,
101 editing: options.editing,
102 menu: 'gallery',
103 } ),
104 new media.controller.GalleryAdd( {} ),
105 ] );
106 }
107 },
108 } );
109
110 function setupStyleOptions() {
111 $( '.widget-inside .gallery-widget-style' ).each( function ( /*i*/ ) {
112 var style = $( this ).val();
113
114 var form = $( this ).parents( 'form' );
115
116 switch ( style ) {
117 case 'slideshow':
118 form.find( '.gallery-widget-link-wrapper' ).hide();
119 form.find( '.gallery-widget-columns-wrapper' ).hide();
120
121 break;
122
123 default:
124 form.find( '.gallery-widget-link-wrapper' ).show();
125 form.find( '.gallery-widget-columns-wrapper' ).show();
126 }
127 } );
128 }
129
130 /**
131 * Take a given Selection of attachments and a thumbs wrapper div (jQuery object)
132 * and fill it with thumbnails
133 */
134 function setupThumbs( selection, wrapper ) {
135 wrapper.empty();
136
137 var imageSize = _wpGalleryWidgetAdminSettings.thumbSize;
138
139 selection.each( function ( model ) {
140 var sizedUrl = model.get( 'url' ) + '?w=' + imageSize + '&h=' + imageSize + '&crop=true';
141
142 var thumb = jQuery( '<img>', {
143 src: sizedUrl,
144 alt: model.get( 'title' ),
145 title: model.get( 'title' ),
146 width: imageSize,
147 height: imageSize,
148 class: 'thumb',
149 } );
150
151 wrapper.append( thumb );
152 } );
153 }
154
155 /**
156 * Take a csv string of ids (as stored in db) and fetch a full Attachments collection
157 */
158 function getAttachments( idsString ) {
159 if ( ! idsString ) {
160 return null;
161 }
162
163 // Found in /wp-includes/js/media-editor.js
164 var shortcode = wp.shortcode.next( 'gallery', '[gallery ids="' + idsString + '"]' );
165
166 // Ignore the rest of the match object, to give attachments() below what it expects
167 shortcode = shortcode.shortcode;
168
169 var attachments = wp.media.gallery.attachments( shortcode );
170
171 return attachments;
172 }
173
174 /**
175 * Take an Attachments collection and return a corresponding Selection model that can be
176 * passed to a MediaFrame to prepopulate the gallery picker
177 */
178 function getSelection( attachments ) {
179 var selection = new wp.media.model.Selection( attachments.models, {
180 props: attachments.props.toJSON(),
181 multiple: true,
182 } );
183
184 selection.gallery = attachments.gallery;
185
186 // Fetch the query's attachments, and then break ties from the
187 // query to allow for sorting.
188 selection.more().done( function () {
189 // Break ties with the query.
190 selection.props.set( { query: false } );
191 selection.unmirror();
192 selection.props.unset( 'orderby' );
193 } );
194
195 return selection;
196 }
197
198 /**
199 * Create a media 'workflow' (MediaFrame). This is the main entry point for the media picker
200 */
201 function getWorkflow( options ) {
202 var workflow = new wp.media.view.MediaFrame.GalleryWidget( options );
203
204 workflow.on(
205 'update',
206 function ( selection ) {
207 var state = workflow.state();
208
209 selection = selection || state.get( 'selection' );
210
211 if ( ! selection ) {
212 return;
213 }
214
215 // Map the Models down into a simple array of ids that can be easily imploded to a csv string
216 var ids = selection.map( function ( model ) {
217 return model.get( 'id' );
218 } );
219
220 var id_string = ids.join( ',' );
221
222 $ids.val( id_string ).trigger( 'change' );
223
224 setupThumbs( selection, $thumbs );
225 },
226 this
227 );
228
229 workflow.setState( workflow.options.state );
230
231 return workflow;
232 }
233 } )( jQuery );
234