jquery-fileupload-rails 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -19,23 +19,31 @@ Require jquery-fileupload in your app/assets/application.js file.
19
19
  The snippet above will add the following js files to the mainfest file.
20
20
 
21
21
  //=require jquery-fileupload/vendor/jquery.ui.widget
22
+ //=require jquery-fileupload/vendor/load-image
23
+ //=require jquery-fileupload/vendor/canvas-to-blob
24
+ //=require jquery-fileupload/vendor/tmpl
22
25
  //=require jquery-fileupload/jquery.iframe-transport
23
26
  //=require jquery-fileupload/jquery.fileupload
24
27
  //=require jquery-fileupload/jquery.fileupload-ip
25
28
  //=require jquery-fileupload/jquery.fileupload-ui
26
29
  //=require jquery-fileupload/locale
27
-
30
+
31
+ If you only need the basic files, just add the code below to your application.js file. [Basic setup guide](https://github.com/blueimp/jQuery-File-Upload/wiki/Basic-plugin)
32
+
33
+ //=require jquery-fileupload/basic
34
+
35
+ The basic setup only includes the following files:
36
+
37
+ //=require jquery-fileupload/vendor/jquery.ui.widget
38
+ //=require jquery-fileupload/jquery.iframe-transport
39
+ //=require jquery-fileupload/jquery.fileupload
40
+
28
41
  ## Using the stylesheet
29
42
 
30
43
  Require the stylesheet file to app/assets/stylesheets/application.css
31
44
 
32
45
  *= require jquery.fileupload-ui
33
46
 
34
- ## Changelog
35
- <ul>
36
- <li>Released gem v.0.1.0</li>
37
- </ul>
38
-
39
47
  ## Thanks
40
48
  Thanks to [Sebastian Tschan](https://github.com/blueimp) for writing an awesome file upload plugin.
41
49
 
@@ -1,7 +1,7 @@
1
1
  module JQuery
2
2
  module FileUpload
3
3
  module Rails
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,4 @@
1
+ //=require jquery-fileupload/vendor/jquery.ui.widget
2
+ //=require jquery-fileupload/jquery.iframe-transport
3
+ //=require jquery-fileupload/jquery.fileupload
4
+
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jQuery XDomainRequest Transport Plugin 1.1.1
2
+ * jQuery XDomainRequest Transport Plugin 1.1.2
3
3
  * https://github.com/blueimp/jQuery-File-Upload
4
4
  *
5
5
  * Copyright 2011, Sebastian Tschan
@@ -26,7 +26,7 @@
26
26
  }
27
27
  }(function ($) {
28
28
  'use strict';
29
- if (window.XDomainRequest && $.ajaxSettings.xhr().withCredentials === undefined) {
29
+ if (window.XDomainRequest && !$.support.cors) {
30
30
  $.ajaxTransport(function (s) {
31
31
  if (s.crossDomain && s.async) {
32
32
  if (s.timeout) {
@@ -1,4 +1,7 @@
1
1
  //=require jquery-fileupload/vendor/jquery.ui.widget
2
+ //=require jquery-fileupload/vendor/load-image
3
+ //=require jquery-fileupload/vendor/canvas-to-blob
4
+ //=require jquery-fileupload/vendor/tmpl
2
5
  //=require jquery-fileupload/jquery.iframe-transport
3
6
  //=require jquery-fileupload/jquery.fileupload
4
7
  //=require jquery-fileupload/jquery.fileupload-ip
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jQuery File Upload Image Processing Plugin 1.0.5
2
+ * jQuery File Upload Image Processing Plugin 1.0.6
3
3
  * https://github.com/blueimp/jQuery-File-Upload
4
4
  *
5
5
  * Copyright 2012, Sebastian Tschan
@@ -112,9 +112,10 @@
112
112
  resize: function (data) {
113
113
  var that = this,
114
114
  options = $.extend({}, this.options, data),
115
- resizeAll = $.type(options.resizeSourceMaxFileSize) !== 'number';
115
+ resizeAll = $.type(options.resizeSourceMaxFileSize) !== 'number',
116
+ isXHRUpload = this._isXHRUpload(options);
116
117
  $.each(data.files, function (index, file) {
117
- if (that._resizeSupport &&
118
+ if (isXHRUpload && that._resizeSupport &&
118
119
  (options.resizeMaxWidth || options.resizeMaxHeight ||
119
120
  options.resizeMinWidth || options.resizeMinHeight) &&
120
121
  (resizeAll || file.size < options.resizeSourceMaxFileSize) &&
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jQuery File Upload User Interface Plugin 6.6.2
2
+ * jQuery File Upload User Interface Plugin 6.6.3
3
3
  * https://github.com/blueimp/jQuery-File-Upload
4
4
  *
5
5
  * Copyright 2010, Sebastian Tschan
@@ -81,9 +81,9 @@
81
81
  var that = $(this).data('fileupload'),
82
82
  options = that.options,
83
83
  files = data.files;
84
- that._adjustMaxNumberOfFiles(-files.length);
85
- data.isAdjusted = true;
86
84
  $(this).fileupload('resize', data).done(data, function () {
85
+ that._adjustMaxNumberOfFiles(-files.length);
86
+ data.isAdjusted = true;
87
87
  data.files.valid = data.isValidated = that._validate(files);
88
88
  data.context = that._renderUpload(files)
89
89
  .appendTo(options.filesContainer)
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jQuery File Upload Plugin 5.8.1
2
+ * jQuery File Upload Plugin 5.10.0
3
3
  * https://github.com/blueimp/jQuery-File-Upload
4
4
  *
5
5
  * Copyright 2010, Sebastian Tschan
@@ -10,7 +10,7 @@
10
10
  */
11
11
 
12
12
  /*jslint nomen: true, unparam: true, regexp: true */
13
- /*global define, window, document, XMLHttpRequestUpload, Blob, File, FormData, location */
13
+ /*global define, window, document, Blob, FormData, location */
14
14
 
15
15
  (function (factory) {
16
16
  'use strict';
@@ -27,6 +27,12 @@
27
27
  }(function ($) {
28
28
  'use strict';
29
29
 
30
+ // The FileReader API is not actually used, but works as feature detection,
31
+ // as e.g. Safari supports XHR file uploads via the FormData API,
32
+ // but not non-multipart XHR file uploads:
33
+ $.support.xhrFileUpload = !!(window.XMLHttpRequestUpload && window.FileReader);
34
+ $.support.xhrFormDataFileUpload = !!window.FormData;
35
+
30
36
  // The fileupload widget listens for change events on file input fields defined
31
37
  // via fileInput setting and paste or drop events of the given dropZone.
32
38
  // In addition to the default jQuery Widget methods, the fileupload widget
@@ -57,7 +63,8 @@
57
63
  replaceFileInput: true,
58
64
  // The parameter name for the file form data (the request argument name).
59
65
  // If undefined or empty, the name property of the file input field is
60
- // used, or "files[]" if the file input name property is also empty:
66
+ // used, or "files[]" if the file input name property is also empty,
67
+ // can be a string or an array of strings:
61
68
  paramName: undefined,
62
69
  // By default, each file of a selection is uploaded using an individual
63
70
  // request for XHR type uploads. Set to false to upload file
@@ -165,13 +172,18 @@
165
172
  },
166
173
 
167
174
  // A list of options that require a refresh after assigning a new value:
168
- _refreshOptionsList: ['namespace', 'dropZone', 'fileInput'],
175
+ _refreshOptionsList: [
176
+ 'namespace',
177
+ 'dropZone',
178
+ 'fileInput',
179
+ 'multipart',
180
+ 'forceIframeTransport'
181
+ ],
169
182
 
170
183
  _isXHRUpload: function (options) {
171
- var undef = 'undefined';
172
184
  return !options.forceIframeTransport &&
173
- typeof XMLHttpRequestUpload !== undef && typeof File !== undef &&
174
- (!options.multipart || typeof FormData !== undef);
185
+ ((!options.multipart && $.support.xhrFileUpload) ||
186
+ $.support.xhrFormDataFileUpload);
175
187
  },
176
188
 
177
189
  _getFormData: function (options) {
@@ -245,8 +257,11 @@
245
257
 
246
258
  _initXHRData: function (options) {
247
259
  var formData,
248
- file = options.files[0];
249
- if (!options.multipart || options.blob) {
260
+ file = options.files[0],
261
+ // Ignore non-multipart setting if not supported:
262
+ multipart = options.multipart || !$.support.xhrFileUpload,
263
+ paramName = options.paramName[0];
264
+ if (!multipart || options.blob) {
250
265
  // For non-multipart uploads and chunked uploads,
251
266
  // file meta data is not part of the request body,
252
267
  // so we transmit this data as part of the HTTP headers.
@@ -262,13 +277,13 @@
262
277
  // Non-chunked non-multipart upload:
263
278
  options.contentType = file.type;
264
279
  options.data = file;
265
- } else if (!options.multipart) {
280
+ } else if (!multipart) {
266
281
  // Chunked non-multipart upload:
267
282
  options.contentType = 'application/octet-stream';
268
283
  options.data = options.blob;
269
284
  }
270
285
  }
271
- if (options.multipart && typeof FormData !== 'undefined') {
286
+ if (multipart && $.support.xhrFormDataFileUpload) {
272
287
  if (options.postMessage) {
273
288
  // window.postMessage does not allow sending FormData
274
289
  // objects, so we just add the File/Blob objects to
@@ -277,13 +292,13 @@
277
292
  formData = this._getFormData(options);
278
293
  if (options.blob) {
279
294
  formData.push({
280
- name: options.paramName,
295
+ name: paramName,
281
296
  value: options.blob
282
297
  });
283
298
  } else {
284
299
  $.each(options.files, function (index, file) {
285
300
  formData.push({
286
- name: options.paramName,
301
+ name: options.paramName[index] || paramName,
287
302
  value: file
288
303
  });
289
304
  });
@@ -298,14 +313,18 @@
298
313
  });
299
314
  }
300
315
  if (options.blob) {
301
- formData.append(options.paramName, options.blob, file.name);
316
+ formData.append(paramName, options.blob, file.name);
302
317
  } else {
303
318
  $.each(options.files, function (index, file) {
304
319
  // File objects are also Blob instances.
305
320
  // This check allows the tests to run with
306
321
  // dummy objects:
307
322
  if (file instanceof Blob) {
308
- formData.append(options.paramName, file, file.name);
323
+ formData.append(
324
+ options.paramName[index] || paramName,
325
+ file,
326
+ file.name
327
+ );
309
328
  }
310
329
  });
311
330
  }
@@ -349,16 +368,36 @@
349
368
  }
350
369
  },
351
370
 
371
+ _getParamName: function (options) {
372
+ var fileInput = $(options.fileInput),
373
+ paramName = options.paramName;
374
+ if (!paramName) {
375
+ paramName = [];
376
+ fileInput.each(function () {
377
+ var input = $(this),
378
+ name = input.prop('name') || 'files[]',
379
+ i = (input.prop('files') || [1]).length;
380
+ while (i) {
381
+ paramName.push(name);
382
+ i -= 1;
383
+ }
384
+ });
385
+ if (!paramName.length) {
386
+ paramName = [fileInput.prop('name') || 'files[]'];
387
+ }
388
+ } else if (!$.isArray(paramName)) {
389
+ paramName = [paramName];
390
+ }
391
+ return paramName;
392
+ },
393
+
352
394
  _initFormSettings: function (options) {
353
395
  // Retrieve missing options from the input field and the
354
396
  // associated form, if available:
355
397
  if (!options.form || !options.form.length) {
356
398
  options.form = $(options.fileInput.prop('form'));
357
399
  }
358
- if (!options.paramName) {
359
- options.paramName = options.fileInput.prop('name') ||
360
- 'files[]';
361
- }
400
+ options.paramName = this._getParamName(options);
362
401
  if (!options.url) {
363
402
  options.url = options.form.prop('action') || location.href;
364
403
  }
@@ -621,21 +660,34 @@
621
660
  result = true,
622
661
  options = $.extend({}, this.options, data),
623
662
  limit = options.limitMultiFileUploads,
663
+ paramName = this._getParamName(options),
664
+ paramNameSet,
665
+ paramNameSlice,
624
666
  fileSet,
625
667
  i;
626
668
  if (!(options.singleFileUploads || limit) ||
627
669
  !this._isXHRUpload(options)) {
628
670
  fileSet = [data.files];
671
+ paramNameSet = [paramName];
629
672
  } else if (!options.singleFileUploads && limit) {
630
673
  fileSet = [];
674
+ paramNameSet = [];
631
675
  for (i = 0; i < data.files.length; i += limit) {
632
676
  fileSet.push(data.files.slice(i, i + limit));
677
+ paramNameSlice = paramName.slice(i, i + limit);
678
+ if (!paramNameSlice.length) {
679
+ paramNameSlice = paramName;
680
+ }
681
+ paramNameSet.push(paramNameSlice);
633
682
  }
683
+ } else {
684
+ paramNameSet = paramName;
634
685
  }
635
686
  data.originalFiles = data.files;
636
687
  $.each(fileSet || data.files, function (index, element) {
637
- var files = fileSet ? element : [element],
638
- newData = $.extend({}, data, {files: files});
688
+ var newData = $.extend({}, data);
689
+ newData.files = fileSet ? element : [element];
690
+ newData.paramName = paramNameSet[index];
639
691
  newData.submit = function () {
640
692
  newData.jqXHR = this.jqXHR =
641
693
  (that._trigger('submit', e, this) !== false) &&
@@ -748,10 +800,12 @@
748
800
 
749
801
  _initEventHandlers: function () {
750
802
  var ns = this.options.namespace;
751
- this.options.dropZone
752
- .bind('dragover.' + ns, {fileupload: this}, this._onDragOver)
753
- .bind('drop.' + ns, {fileupload: this}, this._onDrop)
754
- .bind('paste.' + ns, {fileupload: this}, this._onPaste);
803
+ if (this._isXHRUpload(this.options)) {
804
+ this.options.dropZone
805
+ .bind('dragover.' + ns, {fileupload: this}, this._onDragOver)
806
+ .bind('drop.' + ns, {fileupload: this}, this._onDrop)
807
+ .bind('paste.' + ns, {fileupload: this}, this._onPaste);
808
+ }
755
809
  this.options.fileInput
756
810
  .bind('change.' + ns, {fileupload: this}, this._onChange);
757
811
  },
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jQuery Iframe Transport Plugin 1.3
2
+ * jQuery Iframe Transport Plugin 1.4
3
3
  * https://github.com/blueimp/jQuery-File-Upload
4
4
  *
5
5
  * Copyright 2011, Sebastian Tschan
@@ -30,7 +30,8 @@
30
30
  // The iframe transport accepts three additional options:
31
31
  // options.fileInput: a jQuery collection of file input fields
32
32
  // options.paramName: the parameter name for the file form data,
33
- // overrides the name property of the file input field(s)
33
+ // overrides the name property of the file input field(s),
34
+ // can be a string or an array of strings.
34
35
  // options.formData: an array of objects with name and value properties,
35
36
  // equivalent to the return data of .serializeArray(), e.g.:
36
37
  // [{name: 'a', value: 1}, {name: 'b', value: 2}]
@@ -50,7 +51,9 @@
50
51
  '<iframe src="javascript:false;" name="iframe-transport-' +
51
52
  (counter += 1) + '"></iframe>'
52
53
  ).bind('load', function () {
53
- var fileInputClones;
54
+ var fileInputClones,
55
+ paramNames = $.isArray(options.paramName) ?
56
+ options.paramName : [options.paramName];
54
57
  iframe
55
58
  .unbind('load')
56
59
  .bind('load', function () {
@@ -101,8 +104,11 @@
101
104
  return fileInputClones[index];
102
105
  });
103
106
  if (options.paramName) {
104
- options.fileInput.each(function () {
105
- $(this).prop('name', options.paramName);
107
+ options.fileInput.each(function (index) {
108
+ $(this).prop(
109
+ 'name',
110
+ paramNames[index] || options.paramName
111
+ );
106
112
  });
107
113
  }
108
114
  // Appending the file input fields to the hidden form
@@ -0,0 +1,85 @@
1
+ /*
2
+ * JavaScript Canvas to Blob 1.0.1
3
+ * https://github.com/blueimp/JavaScript-Canvas-to-Blob
4
+ *
5
+ * Copyright 2012, Sebastian Tschan
6
+ * https://blueimp.net
7
+ *
8
+ * Licensed under the MIT license:
9
+ * http://www.opensource.org/licenses/MIT
10
+ *
11
+ * Based on stackoverflow user Stoive's code snippet:
12
+ * http://stackoverflow.com/q/4998908
13
+ */
14
+
15
+ /*jslint nomen: true, regexp: true */
16
+ /*global window, atob, ArrayBuffer, Uint8Array, define */
17
+
18
+ (function ($) {
19
+ 'use strict';
20
+
21
+ var BlobBuilder = window.MozBlobBuilder ||
22
+ window.WebKitBlobBuilder || window.BlobBuilder,
23
+ blobTypes = /^image\/(jpeg|png)$/,
24
+
25
+ // Converts a canvas element to a Blob or File object:
26
+ canvasToBlob = function (canvas, callback, options) {
27
+ options = options || {};
28
+ if (canvas.toBlob) {
29
+ canvas.toBlob(callback, options.type);
30
+ return true;
31
+ } else if (canvas.mozGetAsFile) {
32
+ var name = options.name;
33
+ callback(canvas.mozGetAsFile(
34
+ (blobTypes.test(options.type) && name) ||
35
+ ((name && name.replace(/\..+$/, '')) || 'blob') + '.png',
36
+ options.type
37
+ ));
38
+ return true;
39
+ } else if (canvas.toDataURL && BlobBuilder && window.atob &&
40
+ window.ArrayBuffer && window.Uint8Array) {
41
+ callback(canvasToBlob.dataURItoBlob(
42
+ canvas.toDataURL(options.type)
43
+ ));
44
+ return true;
45
+ }
46
+ return false;
47
+ };
48
+
49
+ // Converts a dataURI to a Blob:
50
+ canvasToBlob.dataURItoBlob = function (dataURI) {
51
+ var byteString,
52
+ arrayBuffer,
53
+ intArray,
54
+ i,
55
+ bb,
56
+ mimeString;
57
+ if (dataURI.split(',')[0].indexOf('base64') >= 0) {
58
+ // Convert base64 to raw binary data held in a string:
59
+ byteString = atob(dataURI.split(',')[1]);
60
+ } else {
61
+ // Convert base64/URLEncoded data component to raw binary data:
62
+ byteString = decodeURIComponent(dataURI.split(',')[1]);
63
+ }
64
+ // Write the bytes of the string to an ArrayBuffer:
65
+ arrayBuffer = new ArrayBuffer(byteString.length);
66
+ intArray = new Uint8Array(arrayBuffer);
67
+ for (i = 0; i < byteString.length; i += 1) {
68
+ intArray[i] = byteString.charCodeAt(i);
69
+ }
70
+ // Write the ArrayBuffer to a blob:
71
+ bb = new BlobBuilder();
72
+ bb.append(arrayBuffer);
73
+ // Separate out the mime component:
74
+ mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
75
+ return bb.getBlob(mimeString);
76
+ };
77
+
78
+ if (typeof define !== 'undefined' && define.amd) {
79
+ define(function () {
80
+ return canvasToBlob;
81
+ });
82
+ } else {
83
+ $.canvasToBlob = canvasToBlob;
84
+ }
85
+ }(this));
@@ -0,0 +1,114 @@
1
+ /*
2
+ * JavaScript Load Image 1.1.4
3
+ * https://github.com/blueimp/JavaScript-Load-Image
4
+ *
5
+ * Copyright 2011, Sebastian Tschan
6
+ * https://blueimp.net
7
+ *
8
+ * Licensed under the MIT license:
9
+ * http://www.opensource.org/licenses/MIT
10
+ */
11
+
12
+ /*jslint nomen: true */
13
+ /*global window, document, URL, webkitURL, Blob, File, FileReader, define */
14
+
15
+ (function ($) {
16
+ 'use strict';
17
+
18
+ // Loads an image for a given File object.
19
+ // Invokes the callback with an img or optional canvas
20
+ // element (if supported by the browser) as parameter:
21
+ var loadImage = function (file, callback, options) {
22
+ var img = document.createElement('img'),
23
+ url,
24
+ oUrl;
25
+ img.onerror = callback;
26
+ img.onload = function () {
27
+ if (oUrl) {
28
+ loadImage.revokeObjectURL(oUrl);
29
+ }
30
+ callback(loadImage.scale(img, options));
31
+ };
32
+ if ((window.Blob && file instanceof Blob) ||
33
+ // Files are also Blob instances, but some browsers
34
+ // (Firefox 3.6) support the File API but not Blobs:
35
+ (window.File && file instanceof File)) {
36
+ url = oUrl = loadImage.createObjectURL(file);
37
+ } else {
38
+ url = file;
39
+ }
40
+ if (url) {
41
+ img.src = url;
42
+ return img;
43
+ } else {
44
+ return loadImage.readFile(file, function (url) {
45
+ img.src = url;
46
+ });
47
+ }
48
+ },
49
+ urlAPI = (window.createObjectURL && window) ||
50
+ (window.URL && URL) || (window.webkitURL && webkitURL);
51
+
52
+ // Scales the given image (img HTML element)
53
+ // using the given options.
54
+ // Returns a canvas object if the canvas option is true
55
+ // and the browser supports canvas, else the scaled image:
56
+ loadImage.scale = function (img, options) {
57
+ options = options || {};
58
+ var canvas = document.createElement('canvas'),
59
+ scale = Math.max(
60
+ (options.minWidth || img.width) / img.width,
61
+ (options.minHeight || img.height) / img.height
62
+ );
63
+ if (scale > 1) {
64
+ img.width = parseInt(img.width * scale, 10);
65
+ img.height = parseInt(img.height * scale, 10);
66
+ }
67
+ scale = Math.min(
68
+ (options.maxWidth || img.width) / img.width,
69
+ (options.maxHeight || img.height) / img.height
70
+ );
71
+ if (scale < 1) {
72
+ img.width = parseInt(img.width * scale, 10);
73
+ img.height = parseInt(img.height * scale, 10);
74
+ }
75
+ if (!options.canvas || !canvas.getContext) {
76
+ return img;
77
+ }
78
+ canvas.width = img.width;
79
+ canvas.height = img.height;
80
+ canvas.getContext('2d')
81
+ .drawImage(img, 0, 0, img.width, img.height);
82
+ return canvas;
83
+ };
84
+
85
+ loadImage.createObjectURL = function (file) {
86
+ return urlAPI ? urlAPI.createObjectURL(file) : false;
87
+ };
88
+
89
+ loadImage.revokeObjectURL = function (url) {
90
+ return urlAPI ? urlAPI.revokeObjectURL(url) : false;
91
+ };
92
+
93
+ // Loads a given File object via FileReader interface,
94
+ // invokes the callback with a data url:
95
+ loadImage.readFile = function (file, callback) {
96
+ if (window.FileReader && FileReader.prototype.readAsDataURL) {
97
+ var fileReader = new FileReader();
98
+ fileReader.onload = function (e) {
99
+ callback(e.target.result);
100
+ };
101
+ fileReader.readAsDataURL(file);
102
+ return fileReader;
103
+ }
104
+ return false;
105
+ };
106
+
107
+ if (typeof define !== 'undefined' && define.amd) {
108
+ define(function () {
109
+ return loadImage;
110
+ });
111
+ } else {
112
+ $.loadImage = loadImage;
113
+ }
114
+ }(this));
@@ -0,0 +1,86 @@
1
+ /*
2
+ * JavaScript Templates 2.1.0
3
+ * https://github.com/blueimp/JavaScript-Templates
4
+ *
5
+ * Copyright 2011, Sebastian Tschan
6
+ * https://blueimp.net
7
+ *
8
+ * Licensed under the MIT license:
9
+ * http://www.opensource.org/licenses/MIT
10
+ *
11
+ * Inspired by John Resig's JavaScript Micro-Templating:
12
+ * http://ejohn.org/blog/javascript-micro-templating/
13
+ */
14
+
15
+ /*jslint evil: true, regexp: true */
16
+ /*global document, define */
17
+
18
+ (function ($) {
19
+ "use strict";
20
+ var tmpl = function (str, data) {
21
+ var f = !/[^\w\-\.:]/.test(str) ? tmpl.cache[str] = tmpl.cache[str] ||
22
+ tmpl(tmpl.load(str)) :
23
+ new Function(
24
+ tmpl.arg + ',tmpl',
25
+ "var _e=tmpl.encode" + tmpl.helper + ",_s='" +
26
+ str.replace(tmpl.regexp, tmpl.func) +
27
+ "';return _s;"
28
+ );
29
+ return data ? f(data, tmpl) : function (data) {
30
+ return f(data, tmpl);
31
+ };
32
+ };
33
+ tmpl.cache = {};
34
+ tmpl.load = function (id) {
35
+ return document.getElementById(id).innerHTML;
36
+ };
37
+ tmpl.regexp = /([\s'\\])(?![^%]*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g;
38
+ tmpl.func = function (s, p1, p2, p3, p4, p5) {
39
+ if (p1) { // whitespace, quote and backspace in interpolation context
40
+ return {
41
+ "\n": "\\n",
42
+ "\r": "\\r",
43
+ "\t": "\\t",
44
+ " " : " "
45
+ }[s] || "\\" + s;
46
+ }
47
+ if (p2) { // interpolation: {%=prop%}, or unescaped: {%#prop%}
48
+ if (p2 === "=") {
49
+ return "'+_e(" + p3 + ")+'";
50
+ }
51
+ return "'+(" + p3 + "||'')+'";
52
+ }
53
+ if (p4) { // evaluation start tag: {%
54
+ return "';";
55
+ }
56
+ if (p5) { // evaluation end tag: %}
57
+ return "_s+='";
58
+ }
59
+ };
60
+ tmpl.encReg = /[<>&"'\x00]/g;
61
+ tmpl.encMap = {
62
+ "<" : "&lt;",
63
+ ">" : "&gt;",
64
+ "&" : "&amp;",
65
+ "\"" : "&quot;",
66
+ "'" : "&#39;"
67
+ };
68
+ tmpl.encode = function (s) {
69
+ return String(s || "").replace(
70
+ tmpl.encReg,
71
+ function (c) {
72
+ return tmpl.encMap[c] || "";
73
+ }
74
+ );
75
+ };
76
+ tmpl.arg = "o";
77
+ tmpl.helper = ",print=function(s,e){_s+=e&&(s||'')||_e(s);}" +
78
+ ",include=function(s,d){_s+=tmpl(s,d);}";
79
+ if (typeof define === "function" && define.amd) {
80
+ define(function () {
81
+ return tmpl;
82
+ });
83
+ } else {
84
+ $.tmpl = tmpl;
85
+ }
86
+ }(this));
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jquery-fileupload-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-13 00:00:00.000000000 +08:00
13
- default_executable:
12
+ date: 2012-04-27 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: railties
17
- requirement: &2152510240 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ! '>='
@@ -22,10 +21,15 @@ dependencies:
22
21
  version: '3.1'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *2152510240
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '3.1'
26
30
  - !ruby/object:Gem::Dependency
27
31
  name: actionpack
28
- requirement: &2152509620 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
29
33
  none: false
30
34
  requirements:
31
35
  - - ! '>='
@@ -33,10 +37,15 @@ dependencies:
33
37
  version: '3.1'
34
38
  type: :runtime
35
39
  prerelease: false
36
- version_requirements: *2152509620
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '3.1'
37
46
  - !ruby/object:Gem::Dependency
38
47
  name: rails
39
- requirement: &2152509040 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
40
49
  none: false
41
50
  requirements:
42
51
  - - ! '>='
@@ -44,7 +53,12 @@ dependencies:
44
53
  version: '3.1'
45
54
  type: :development
46
55
  prerelease: false
47
- version_requirements: *2152509040
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '3.1'
48
62
  description: jQuery File Upload by Sebastian Tschan integrated for Rails 3.1 Asset
49
63
  Pipeline
50
64
  email:
@@ -59,6 +73,7 @@ files:
59
73
  - lib/jquery-fileupload-rails.rb
60
74
  - vendor/assets/images/loading.gif
61
75
  - vendor/assets/images/progressbar.gif
76
+ - vendor/assets/javascripts/jquery-fileupload/basic.js
62
77
  - vendor/assets/javascripts/jquery-fileupload/cors/jquery.postmessage-transport.js
63
78
  - vendor/assets/javascripts/jquery-fileupload/cors/jquery.xdr-transport.js
64
79
  - vendor/assets/javascripts/jquery-fileupload/index.js
@@ -67,11 +82,13 @@ files:
67
82
  - vendor/assets/javascripts/jquery-fileupload/jquery.fileupload.js
68
83
  - vendor/assets/javascripts/jquery-fileupload/jquery.iframe-transport.js
69
84
  - vendor/assets/javascripts/jquery-fileupload/locale.js
85
+ - vendor/assets/javascripts/jquery-fileupload/vendor/canvas-to-blob.js
70
86
  - vendor/assets/javascripts/jquery-fileupload/vendor/jquery.ui.widget.js
87
+ - vendor/assets/javascripts/jquery-fileupload/vendor/load-image.js
88
+ - vendor/assets/javascripts/jquery-fileupload/vendor/tmpl.js
71
89
  - vendor/assets/stylesheets/jquery.fileupload-ui.css
72
90
  - Rakefile
73
91
  - README.md
74
- has_rdoc: true
75
92
  homepage: https://github.com/tors/jquery-fileupload-rails
76
93
  licenses: []
77
94
  post_install_message:
@@ -92,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
109
  version: '0'
93
110
  requirements: []
94
111
  rubyforge_project: jquery-fileupload-rails
95
- rubygems_version: 1.6.2
112
+ rubygems_version: 1.8.21
96
113
  signing_key:
97
114
  specification_version: 3
98
115
  summary: jQuery File Upload for Rails 3.1 Asset Pipeline