PluginProbe
JetFormBuilder — Dynamic Blocks Form Builder / 1.0.0
JetFormBuilder — Dynamic Blocks Form Builder v1.0.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.0.0, at assets/js/file-upload.js

326 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( e ) {
58
59 var $this = $( this ),
60 $file = $this.closest( '.jet-form-builder-file-upload__file' ),
61 $upload = $this.closest( '.jet-form-builder-file-upload' ),
62 $value = $upload.find( '.jet-form-builder-file-upload__value' ),
63 val = $value.val(),
64 fileURL = $file.data( 'file' ),
65 fileID = $file.data( 'id' ),
66 $errors = $upload.find( '.jet-form-builder-file-upload__errors' ),
67 format = $file.data( 'format' );
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 lockButtons: function( $upload ) {
161
162 var $form = $upload.closest( 'form.jet-form' ),
163 $buttons = $form.find( '.jet-form-builder__submit, .jet-form-builder__next-page, .jet-form-builder__prev-page' );
164
165 $buttons.attr( 'disabled', true );
166
167 },
168
169 unlockButtons: function( $upload ) {
170
171 var $form = $upload.closest( 'form.jet-form' ),
172 $buttons = $form.find( '.jet-form-builder__submit, .jet-form-builder__next-page, .jet-form-builder__prev-page' );
173
174 $buttons.attr( 'disabled', false );
175
176 },
177
178 uploadFiles: function( files, input ) {
179
180 if ( ! files.length ) {
181 return;
182 }
183
184 var file, formData, formID, field, xhr, limit, allowedTypes, maxSize;
185 var $input = $( input ),
186 $upload = $input.closest( '.jet-form-builder-file-upload' ),
187 $valueInput = $upload.find( '.jet-form-builder-file-upload__value' ),
188 $errors = $upload.find( '.jet-form-builder-file-upload__errors' ),
189 currentVal = $valueInput.val();
190
191 limit = input.dataset.max_files || 1;
192 limit = parseInt( limit, 10 );
193
194 allowedTypes = input.dataset.allowed_types || false;
195 formID = input.dataset.form_id || false;
196 field = input.dataset.field || false;
197 maxSize = input.dataset.max_size || window.JetFormBuilderFileUploadConfig.max_upload_size;
198 maxSize = parseInt( maxSize, 10 );
199
200 if ( currentVal && '' !== currentVal ) {
201 currentVal = JSON.parse( currentVal );
202 if ( Array.isArray( currentVal ) && currentVal.length && limit < ( files.length + currentVal.length ) ) {
203 throw 'upload_limit';
204 }
205 }
206
207 if ( limit < files.length ) {
208 throw 'upload_limit';
209 }
210
211 formData = new FormData();
212
213 formData.append( 'action', window.JetFormBuilderFileUploadConfig.action );
214 formData.append( 'nonce', window.JetFormBuilderFileUploadConfig.nonce );
215 formData.append( 'form_id', formID );
216 formData.append( 'field', field );
217
218 for ( var i = 0; i < files.length; i++ ) {
219
220 file = files.item( i );
221
222 if ( allowedTypes && 0 > allowedTypes.indexOf( file.type ) ) {
223 throw 'file_type';
224 }
225
226 if ( file['size'] > maxSize ) {
227 throw 'file_size';
228 }
229
230 formData.append( 'file_' + i, file );
231
232 }
233
234 xhr = new XMLHttpRequest();
235
236 $upload.addClass( 'is-loading' );
237 JetFormBuilderFileUpload.lockButtons( $upload );
238
239 xhr.open( 'POST', window.JetFormBuilderFileUploadConfig.ajaxurl, true );
240
241 xhr.onload = function( e, r ) {
242
243 $upload.removeClass( 'is-loading' );
244 JetFormBuilderFileUpload.unlockButtons( $upload );
245
246 if ( xhr.status === 200 ) {
247 var response = e.currentTarget.response;
248
249 try {
250 response = JSON.parse( response );
251 } catch ( e ) {
252 $errors.html( window.JetFormBuilderFileUploadConfig.errors.internal ).removeClass( 'is-hidden' );
253 return false;
254 }
255
256 if ( ! response.success ) {
257 $errors.html( response.data ).removeClass( 'is-hidden' );
258 return;
259 } else {
260 JetFormBuilderFileUpload.updateResults( $upload, response.data );
261 if ( response.data.errors ) {
262 $errors.html( response.data.errors ).removeClass( 'is-hidden' );
263 } else {
264 $errors.html( '' ).addClass( 'is-hidden' );
265 }
266 }
267
268 } else {
269 $errors.html( xhr.status ).removeClass( 'is-hidden' );
270 }
271
272 };
273
274 xhr.send( formData );
275
276 input.value = '';
277
278 },
279
280 updateResults: function( $upload, responseData ) {
281
282 var $filesContainer = $upload.find( '.jet-form-builder-file-upload__files' ),
283 $input = $upload.find( '.jet-form-builder-file-upload__value' ),
284 args = $filesContainer.data( 'args' ),
285 values = [],
286 inputValues = false,
287 limit = args.max_files || 1;
288
289 limit = parseInt( limit, 10 );
290
291 if ( 1 === limit ) {
292 $filesContainer.html( responseData.html );
293 $input.val( JSON.stringify( responseData.value ) ).trigger( 'change.JetFormBuilderMain' );
294 } else {
295
296 inputValues = $input.val();
297
298 if ( inputValues ) {
299 values = JSON.parse( inputValues );
300 if ( ! values ) {
301 values = [];
302 }
303 }
304
305 for ( var i = 0; i < responseData.value.length; i++ ) {
306 values.push( responseData.value[ i ] );
307 };
308
309 $input.val( JSON.stringify( values ) ).trigger( 'change.JetFormBuilderMain' );
310
311 $filesContainer.append( responseData.html );
312 $filesContainer.sortable( 'destroy' );
313
314 $filesContainer.sortable( {
315 items: '.jet-form-builder-file-upload__file',
316 forcePlaceholderSize: true,
317 } ).bind( 'sortupdate', JetFormBuilderFileUpload.onSortCallback );
318 }
319
320 }
321
322 };
323
324 JetFormBuilderFileUpload.init();
325
326 }( jQuery ) );