PluginProbe
JetFormBuilder — Dynamic Blocks Form Builder / 1.1.0
JetFormBuilder — Dynamic Blocks Form Builder v1.1.0
3.6.6.1 3.6.6 3.6.5.4 3.6.5.3 3.6.5.2 3.6.5.1 3.6.5 3.6.4.2 3.6.4.1 3.6.4 3.6.3.1 3.6.3 3.6.2.2 3.6.2.1 3.6.2 3.6.1.1 3.6.1 3.6.0.1 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 All 134 releases
jetformbuilder / assets / js / file-upload.js

file-upload.js in JetFormBuilder — Dynamic Blocks Form Builder 1.1.0, at assets/js/file-upload.js

330 lines 8.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 ( function( $ ) {
2
3 "use strict";
4
5 var JetFormBuilderFileUpload = {
6
7 init: function() {
8 $( document )
9 .on( 'change', '.jet-form-builder-file-upload__input', JetFormBuilderFileUpload.processUpload )
10 .on( 'click', '.jet-form-builder-file-upload__file-remove', JetFormBuilderFileUpload.deleteUpload );
11
12 $( '.jet-form-builder-file-upload__files' ).sortable({
13 items: '.jet-form-builder-file-upload__file',
14 forcePlaceholderSize: true,
15 } ).bind( 'sortupdate', JetFormBuilderFileUpload.onSortCallback );
16 },
17
18 onSortCallback: function( e, ui ) {
19 var $upload = ui.item.closest( '.jet-form-builder-file-upload' ),
20 $files = $( e.target ),
21 $valueInput = $upload.find( '.jet-form-builder-file-upload__value' ),
22 args = $files.data( 'args' ),
23 maxFiles = parseInt( args.max_files, 10 ),
24 values = [];
25
26 if ( 1 === maxFiles || ! args.insert_attachment ) {
27 return;
28 }
29
30 $files.find( '.jet-form-builder-file-upload__file' ).each( function() {
31
32 var $file = $( this );
33
34 switch ( args.value_format ) {
35 case 'id':
36 values.push( $file.data( 'id' ) );
37 break;
38
39 case 'both':
40 values.push( {
41 id: $file.data( 'id' ),
42 url: $file.data( 'file' ),
43 } );
44 break;
45
46 default:
47 values.push( $file.data( 'file' ) );
48 break;
49 }
50
51 } );
52
53 $valueInput.val( JSON.stringify( values ) ).trigger( 'change.JetFormBuilderMain' );
54
55 },
56
57 deleteUpload: function() {
58 var $this = $( this ),
59 $file = $this.closest( '.jet-form-builder-file-upload__file' ),
60 $upload = $this.closest( '.jet-form-builder-file-upload' ),
61 $value = $upload.find( '.jet-form-builder-file-upload__value' ),
62 val = $value.val(),
63 fileURL = $file.data( 'file' ),
64 fileID = $file.data( 'id' ),
65 $errors = $upload.find( '.jet-form-builder-file-upload__errors' ),
66 format = $file.data( 'format' );
67
68
69 if ( ! $errors.hasClass( 'is-hidden' ) ) {
70 $errors.html( '' ).addClass( 'is-hidden' );
71 }
72
73 $file.remove();
74
75 if ( ! val ) {
76 return;
77 }
78
79 val = JSON.parse( val );
80
81 if ( fileID ) {
82 fileID = parseInt( fileID, 10 );
83 }
84
85 if ( val.constructor === Array ) {
86
87 var index = -1;
88
89 switch ( format ) {
90
91 case 'url':
92 index = val.indexOf( fileURL );
93 break;
94
95 case 'id':
96
97 for ( var i = 0; i < val.length; i++ ) {
98 val[ i ] = parseInt( val[ i ], 10 );
99 };
100
101 index = val.indexOf( fileID );
102 break;
103
104 case 'both':
105
106 for ( var i = 0; i < val.length; i++ ) {
107 if ( fileURL === val[ i ].url ) {
108 index = i;
109 }
110 }
111
112 break;
113 }
114
115 if ( 0 <= index ) {
116 val.splice( index, 1 );
117 }
118
119 if ( !val[0] ) {
120 val = '';
121 }
122
123 } else {
124 val = '';
125 }
126
127 if ( val ) {
128 val = JSON.stringify( val )
129 }
130
131 $value.val( val ).trigger( 'change.JetFormBuilderMain' );
132
133 },
134
135 processUpload: function( event ) {
136
137 var files = event.target.files,
138 $errors = $( event.target ).closest( '.jet-form-builder-file-upload' ).find( '.jet-form-builder-file-upload__errors' );
139
140 $errors.html( '' ).addClass( 'is-hidden' );
141
142 try {
143 JetFormBuilderFileUpload.uploadFiles( files, event.target );
144 } catch ( error ) {
145 /**
146 *
147 */
148 return;
149
150 if ( window.JetFormBuilderFileUploadConfig.errors[ error ] ) {
151 $errors.html( window.JetFormBuilderFileUploadConfig.errors[ error ] ).removeClass( 'is-hidden' );
152 } else {
153 $errors.html( error ).removeClass( 'is-hidden' );
154 }
155
156 event.target.value = '';
157
158 }
159
160 },
161
162 lockButtons: function( $upload ) {
163
164 var $form = $upload.closest( 'form.jet-form-builder' ),
165 $buttons = $form.find( '.jet-form-builder__submit, .jet-form-builder__next-page, .jet-form-builder__prev-page' );
166
167 $buttons.attr( 'disabled', true );
168
169 },
170
171 unlockButtons: function( $upload ) {
172
173 var $form = $upload.closest( 'form.jet-form-builder' ),
174 $buttons = $form.find( '.jet-form-builder__submit, .jet-form-builder__next-page, .jet-form-builder__prev-page' );
175
176 $buttons.attr( 'disabled', false );
177
178 },
179
180 uploadFiles: function( files, input ) {
181
182 if ( ! files.length ) {
183 return;
184 }
185
186 var file, formData, formID, field, xhr, limit, allowedTypes, maxSize;
187 var $input = $( input ),
188 $upload = $input.closest( '.jet-form-builder-file-upload' ),
189 $valueInput = $upload.find( '.jet-form-builder-file-upload__value' ),
190 $errors = $upload.find( '.jet-form-builder-file-upload__errors' ),
191 currentVal = $valueInput.val();
192
193 limit = input.dataset.max_files || 1;
194 limit = parseInt( limit, 10 );
195
196 allowedTypes = input.dataset.allowed_types || false;
197 formID = input.dataset.form_id || false;
198 field = input.dataset.field || false;
199 maxSize = input.dataset.max_size || window.JetFormBuilderFileUploadConfig.max_upload_size;
200 maxSize = parseInt( maxSize, 10 );
201
202 if ( currentVal && '' !== currentVal ) {
203 currentVal = JSON.parse( currentVal );
204
205 if ( Array.isArray( currentVal ) && currentVal.length && limit < ( files.length + currentVal.length ) ) {
206 throw 'upload_limit';
207 }
208
209 }
210
211 if ( limit < files.length ) {
212 throw 'upload_limit';
213 }
214
215 formData = new FormData();
216
217 formData.append( 'action', window.JetFormBuilderFileUploadConfig.action );
218 formData.append( 'nonce', window.JetFormBuilderFileUploadConfig.nonce );
219 formData.append( 'form_id', formID );
220 formData.append( 'field', field );
221
222 for ( var i = 0; i < files.length; i++ ) {
223
224 file = files.item( i );
225
226 if ( allowedTypes && 0 > allowedTypes.indexOf( file.type ) ) {
227 throw 'file_type';
228 }
229
230 if ( file['size'] > maxSize ) {
231 throw 'file_size';
232 }
233
234 formData.append( 'file_' + i, file );
235
236 }
237
238 xhr = new XMLHttpRequest();
239
240 $upload.addClass( 'is-loading' );
241 JetFormBuilderFileUpload.lockButtons( $upload );
242
243 xhr.open( 'POST', window.JetFormBuilderFileUploadConfig.ajaxurl, true );
244
245 xhr.onload = function( e, r ) {
246
247 $upload.removeClass( 'is-loading' );
248 JetFormBuilderFileUpload.unlockButtons( $upload );
249
250 if ( xhr.status === 200 ) {
251 var response = e.currentTarget.response;
252
253 try {
254 response = JSON.parse( response );
255 } catch ( e ) {
256 $errors.html( window.JetFormBuilderFileUploadConfig.errors.internal ).removeClass( 'is-hidden' );
257 return false;
258 }
259
260 if ( ! response.success ) {
261 $errors.html( response.data ).removeClass( 'is-hidden' );
262 return;
263 } else {
264 JetFormBuilderFileUpload.updateResults( $upload, response.data );
265 if ( response.data.errors ) {
266 $errors.html( response.data.errors ).removeClass( 'is-hidden' );
267 } else {
268 $errors.html( '' ).addClass( 'is-hidden' );
269 }
270 }
271
272 } else {
273 $errors.html( xhr.status ).removeClass( 'is-hidden' );
274 }
275
276 };
277
278 xhr.send( formData );
279
280 input.value = '';
281
282 },
283
284 updateResults: function( $upload, responseData ) {
285
286 var $filesContainer = $upload.find( '.jet-form-builder-file-upload__files' ),
287 $input = $upload.find( '.jet-form-builder-file-upload__value' ),
288 args = $filesContainer.data( 'args' ),
289 values = [],
290 inputValues = false,
291 limit = args.max_files || 1;
292
293 limit = parseInt( limit, 10 );
294
295 if ( 1 === limit ) {
296 $filesContainer.html( responseData.html );
297 $input.val( JSON.stringify( responseData.value ) ).trigger( 'change.JetFormBuilderMain' );
298 } else {
299
300 inputValues = $input.val();
301
302 if ( inputValues ) {
303 values = JSON.parse( inputValues );
304 if ( ! values ) {
305 values = [];
306 }
307 }
308
309 for ( var i = 0; i < responseData.value.length; i++ ) {
310 values.push( responseData.value[ i ] );
311 };
312
313 $input.val( JSON.stringify( values ) ).trigger( 'change.JetFormBuilderMain' );
314
315 $filesContainer.append( responseData.html );
316 $filesContainer.sortable( 'destroy' );
317
318 $filesContainer.sortable( {
319 items: '.jet-form-builder-file-upload__file',
320 forcePlaceholderSize: true,
321 } ).bind( 'sortupdate', JetFormBuilderFileUpload.onSortCallback );
322 }
323
324 }
325
326 };
327
328 JetFormBuilderFileUpload.init();
329
330 }( jQuery ) );