it-logica-application-backbone 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.1.5
@@ -0,0 +1,691 @@
1
+ /*
2
+ * jQuery File Upload User Interface Plugin 6.8.2
3
+ * https://github.com/blueimp/jQuery-File-Upload
4
+ *
5
+ * Copyright 2010, 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, unparam: true, regexp: true */
13
+ /*global define, window, document, URL, webkitURL, FileReader */
14
+
15
+ (function (factory) {
16
+ 'use strict';
17
+ if (typeof define === 'function' && define.amd) {
18
+ // Register as an anonymous AMD module:
19
+ define([
20
+ 'jquery',
21
+ 'tmpl',
22
+ 'load-image',
23
+ './jquery.fileupload-fp'
24
+ ], factory);
25
+ } else {
26
+ // Browser globals:
27
+ factory(
28
+ window.jQuery,
29
+ window.tmpl,
30
+ window.loadImage
31
+ );
32
+ }
33
+ }(function ($, tmpl, loadImage) {
34
+ 'use strict';
35
+
36
+ // The UI version extends the FP (file processing) version or the basic
37
+ // file upload widget and adds complete user interface interaction:
38
+ var parentWidget = ($.blueimpFP || $.blueimp).fileupload;
39
+ $.widget('blueimpUI.fileupload', parentWidget, {
40
+
41
+ options: {
42
+ // By default, files added to the widget are uploaded as soon
43
+ // as the user clicks on the start buttons. To enable automatic
44
+ // uploads, set the following option to true:
45
+ autoUpload: false,
46
+ // The following option limits the number of files that are
47
+ // allowed to be uploaded using this widget:
48
+ maxNumberOfFiles: undefined,
49
+ // The maximum allowed file size:
50
+ maxFileSize: undefined,
51
+ // The minimum allowed file size:
52
+ minFileSize: undefined,
53
+ // The regular expression for allowed file types, matches
54
+ // against either file type or file name:
55
+ acceptFileTypes: /.+$/i,
56
+ // The regular expression to define for which files a preview
57
+ // image is shown, matched against the file type:
58
+ previewSourceFileTypes: /^image\/(gif|jpeg|png)$/,
59
+ // The maximum file size of images that are to be displayed as preview:
60
+ previewSourceMaxFileSize: 5000000, // 5MB
61
+ // The maximum width of the preview images:
62
+ previewMaxWidth: 80,
63
+ // The maximum height of the preview images:
64
+ previewMaxHeight: 80,
65
+ // By default, preview images are displayed as canvas elements
66
+ // if supported by the browser. Set the following option to false
67
+ // to always display preview images as img elements:
68
+ previewAsCanvas: true,
69
+ // The ID of the upload template:
70
+ uploadTemplateId: 'template-upload',
71
+ // The ID of the download template:
72
+ downloadTemplateId: 'template-download',
73
+ // The container for the list of files. If undefined, it is set to
74
+ // an element with class "files" inside of the widget element:
75
+ filesContainer: undefined,
76
+ // By default, files are appended to the files container.
77
+ // Set the following option to true, to prepend files instead:
78
+ prependFiles: false,
79
+ // The expected data type of the upload response, sets the dataType
80
+ // option of the $.ajax upload requests:
81
+ dataType: 'json',
82
+
83
+ // The add callback is invoked as soon as files are added to the fileupload
84
+ // widget (via file input selection, drag & drop or add API call).
85
+ // See the basic file upload widget for more information:
86
+ add: function (e, data) {
87
+ var that = $(this).data('fileupload'),
88
+ options = that.options,
89
+ files = data.files;
90
+ $(this).fileupload('process', data).done(function () {
91
+ that._adjustMaxNumberOfFiles(-files.length);
92
+ data.isAdjusted = true;
93
+ data.files.valid = data.isValidated = that._validate(files);
94
+ data.context = that._renderUpload(files).data('data', data);
95
+ options.filesContainer[
96
+ options.prependFiles ? 'prepend' : 'append'
97
+ ](data.context);
98
+ that._renderPreviews(files, data.context);
99
+ that._forceReflow(data.context);
100
+ that._transition(data.context).done(
101
+ function () {
102
+ if ((that._trigger('added', e, data) !== false) &&
103
+ (options.autoUpload || data.autoUpload) &&
104
+ data.autoUpload !== false && data.isValidated) {
105
+ data.submit();
106
+ }
107
+ }
108
+ );
109
+ });
110
+ },
111
+ // Callback for the start of each file upload request:
112
+ send: function (e, data) {
113
+ var that = $(this).data('fileupload');
114
+ if (!data.isValidated) {
115
+ if (!data.isAdjusted) {
116
+ that._adjustMaxNumberOfFiles(-data.files.length);
117
+ }
118
+ if (!that._validate(data.files)) {
119
+ return false;
120
+ }
121
+ }
122
+ if (data.context && data.dataType &&
123
+ data.dataType.substr(0, 6) === 'iframe') {
124
+ // Iframe Transport does not support progress events.
125
+ // In lack of an indeterminate progress bar, we set
126
+ // the progress to 100%, showing the full animated bar:
127
+ data.context
128
+ .find('.progress').addClass(
129
+ !$.support.transition && 'progress-animated'
130
+ )
131
+ .find('.bar').css(
132
+ 'width',
133
+ parseInt(100, 10) + '%'
134
+ );
135
+ }
136
+ return that._trigger('sent', e, data);
137
+ },
138
+ // Callback for successful uploads:
139
+ done: function (e, data) {
140
+ var that = $(this).data('fileupload'),
141
+ template;
142
+ if (data.context) {
143
+ data.context.each(function (index) {
144
+ var file = ($.isArray(data.result) &&
145
+ data.result[index]) || {error: 'emptyResult'};
146
+ if (file.error) {
147
+ that._adjustMaxNumberOfFiles(1);
148
+ }
149
+ that._transition($(this)).done(
150
+ function () {
151
+ var node = $(this);
152
+ template = that._renderDownload([file])
153
+ .css('height', node.height())
154
+ .replaceAll(node);
155
+ that._forceReflow(template);
156
+ that._transition(template).done(
157
+ function () {
158
+ data.context = $(this);
159
+ that._trigger('completed', e, data);
160
+ }
161
+ );
162
+ }
163
+ );
164
+ });
165
+ } else {
166
+ template = that._renderDownload(data.result)
167
+ .appendTo(that.options.filesContainer);
168
+ that._forceReflow(template);
169
+ that._transition(template).done(
170
+ function () {
171
+ data.context = $(this);
172
+ that._trigger('completed', e, data);
173
+ }
174
+ );
175
+ }
176
+ },
177
+ // Callback for failed (abort or error) uploads:
178
+ fail: function (e, data) {
179
+ var that = $(this).data('fileupload'),
180
+ template;
181
+ that._adjustMaxNumberOfFiles(data.files.length);
182
+ if (data.context) {
183
+ data.context.each(function (index) {
184
+ if (data.errorThrown !== 'abort') {
185
+ var file = data.files[index];
186
+ file.error = file.error || data.errorThrown ||
187
+ true;
188
+ that._transition($(this)).done(
189
+ function () {
190
+ var node = $(this);
191
+ template = that._renderDownload([file])
192
+ .replaceAll(node);
193
+ that._forceReflow(template);
194
+ that._transition(template).done(
195
+ function () {
196
+ data.context = $(this);
197
+ that._trigger('failed', e, data);
198
+ }
199
+ );
200
+ }
201
+ );
202
+ } else {
203
+ that._transition($(this)).done(
204
+ function () {
205
+ $(this).remove();
206
+ that._trigger('failed', e, data);
207
+ }
208
+ );
209
+ }
210
+ });
211
+ } else if (data.errorThrown !== 'abort') {
212
+ that._adjustMaxNumberOfFiles(-data.files.length);
213
+ data.context = that._renderUpload(data.files)
214
+ .appendTo(that.options.filesContainer)
215
+ .data('data', data);
216
+ that._forceReflow(data.context);
217
+ that._transition(data.context).done(
218
+ function () {
219
+ data.context = $(this);
220
+ that._trigger('failed', e, data);
221
+ }
222
+ );
223
+ } else {
224
+ that._trigger('failed', e, data);
225
+ }
226
+ },
227
+ // Callback for upload progress events:
228
+ progress: function (e, data) {
229
+ if (data.context) {
230
+ data.context.find('.bar').css(
231
+ 'width',
232
+ parseInt(data.loaded / data.total * 100, 10) + '%'
233
+ );
234
+ }
235
+ },
236
+ // Callback for global upload progress events:
237
+ progressall: function (e, data) {
238
+ var $this = $(this);
239
+ $this.find('.fileupload-progress')
240
+ .find('.bar').css(
241
+ 'width',
242
+ parseInt(data.loaded / data.total * 100, 10) + '%'
243
+ ).end()
244
+ .find('.progress-extended').each(function () {
245
+ $(this).html(
246
+ $this.data('fileupload')
247
+ ._renderExtendedProgress(data)
248
+ );
249
+ });
250
+ },
251
+ // Callback for uploads start, equivalent to the global ajaxStart event:
252
+ start: function (e) {
253
+ var that = $(this).data('fileupload');
254
+ that._transition($(this).find('.fileupload-progress')).done(
255
+ function () {
256
+ that._trigger('started', e);
257
+ }
258
+ );
259
+ },
260
+ // Callback for uploads stop, equivalent to the global ajaxStop event:
261
+ stop: function (e) {
262
+ var that = $(this).data('fileupload');
263
+ that._transition($(this).find('.fileupload-progress')).done(
264
+ function () {
265
+ $(this).find('.bar').css('width', '0%');
266
+ $(this).find('.progress-extended').html(' ');
267
+ that._trigger('stopped', e);
268
+ }
269
+ );
270
+ },
271
+ // Callback for file deletion:
272
+ destroy: function (e, data) {
273
+ var that = $(this).data('fileupload');
274
+ if (data.url) {
275
+ $.ajax(data);
276
+ that._adjustMaxNumberOfFiles(1);
277
+ }
278
+ that._transition(data.context).done(
279
+ function () {
280
+ $(this).remove();
281
+ that._trigger('destroyed', e, data);
282
+ }
283
+ );
284
+ }
285
+ },
286
+
287
+ // Link handler, that allows to download files
288
+ // by drag & drop of the links to the desktop:
289
+ _enableDragToDesktop: function () {
290
+ var link = $(this),
291
+ url = link.prop('href'),
292
+ name = link.prop('download'),
293
+ type = 'application/octet-stream';
294
+ link.bind('dragstart', function (e) {
295
+ try {
296
+ e.originalEvent.dataTransfer.setData(
297
+ 'DownloadURL',
298
+ [type, name, url].join(':')
299
+ );
300
+ } catch (err) {}
301
+ });
302
+ },
303
+
304
+ _adjustMaxNumberOfFiles: function (operand) {
305
+ if (typeof this.options.maxNumberOfFiles === 'number') {
306
+ this.options.maxNumberOfFiles += operand;
307
+ if (this.options.maxNumberOfFiles < 1) {
308
+ this._disableFileInputButton();
309
+ } else {
310
+ this._enableFileInputButton();
311
+ }
312
+ }
313
+ },
314
+
315
+ _formatFileSize: function (bytes) {
316
+ if (typeof bytes !== 'number') {
317
+ return '';
318
+ }
319
+ if (bytes >= 1000000000) {
320
+ return (bytes / 1000000000).toFixed(2) + ' GB';
321
+ }
322
+ if (bytes >= 1000000) {
323
+ return (bytes / 1000000).toFixed(2) + ' MB';
324
+ }
325
+ return (bytes / 1000).toFixed(2) + ' KB';
326
+ },
327
+
328
+ _formatBitrate: function (bits) {
329
+ if (typeof bits !== 'number') {
330
+ return '';
331
+ }
332
+ if (bits >= 1000000000) {
333
+ return (bits / 1000000000).toFixed(2) + ' Gbit/s';
334
+ }
335
+ if (bits >= 1000000) {
336
+ return (bits / 1000000).toFixed(2) + ' Mbit/s';
337
+ }
338
+ if (bits >= 1000) {
339
+ return (bits / 1000).toFixed(2) + ' kbit/s';
340
+ }
341
+ return bits + ' bit/s';
342
+ },
343
+
344
+ _formatTime: function (seconds) {
345
+ var date = new Date(seconds * 1000),
346
+ days = parseInt(seconds / 86400, 10);
347
+ days = days ? days + 'd ' : '';
348
+ return days +
349
+ ('0' + date.getUTCHours()).slice(-2) + ':' +
350
+ ('0' + date.getUTCMinutes()).slice(-2) + ':' +
351
+ ('0' + date.getUTCSeconds()).slice(-2);
352
+ },
353
+
354
+ _formatPercentage: function (floatValue) {
355
+ return (floatValue * 100).toFixed(2) + ' %';
356
+ },
357
+
358
+ _renderExtendedProgress: function (data) {
359
+ return this._formatBitrate(data.bitrate) + ' | ' +
360
+ this._formatTime(
361
+ (data.total - data.loaded) * 8 / data.bitrate
362
+ ) + ' | ' +
363
+ this._formatPercentage(
364
+ data.loaded / data.total
365
+ ) + ' | ' +
366
+ this._formatFileSize(data.loaded) + ' / ' +
367
+ this._formatFileSize(data.total);
368
+ },
369
+
370
+ _hasError: function (file) {
371
+ if (file.error) {
372
+ return file.error;
373
+ }
374
+ // The number of added files is subtracted from
375
+ // maxNumberOfFiles before validation, so we check if
376
+ // maxNumberOfFiles is below 0 (instead of below 1):
377
+ if (this.options.maxNumberOfFiles < 0) {
378
+ return 'maxNumberOfFiles';
379
+ }
380
+ // Files are accepted if either the file type or the file name
381
+ // matches against the acceptFileTypes regular expression, as
382
+ // only browsers with support for the File API report the type:
383
+ if (!(this.options.acceptFileTypes.test(file.type) ||
384
+ this.options.acceptFileTypes.test(file.name))) {
385
+ return 'acceptFileTypes';
386
+ }
387
+ if (this.options.maxFileSize &&
388
+ file.size > this.options.maxFileSize) {
389
+ return 'maxFileSize';
390
+ }
391
+ if (typeof file.size === 'number' &&
392
+ file.size < this.options.minFileSize) {
393
+ return 'minFileSize';
394
+ }
395
+ return null;
396
+ },
397
+
398
+ _validate: function (files) {
399
+ var that = this,
400
+ valid = !!files.length;
401
+ $.each(files, function (index, file) {
402
+ file.error = that._hasError(file);
403
+ if (file.error) {
404
+ valid = false;
405
+ }
406
+ });
407
+ return valid;
408
+ },
409
+
410
+ _renderTemplate: function (func, files) {
411
+ if (!func) {
412
+ return $();
413
+ }
414
+ var result = func({
415
+ files: files,
416
+ formatFileSize: this._formatFileSize,
417
+ options: this.options
418
+ });
419
+ if (result instanceof $) {
420
+ return result;
421
+ }
422
+ return $(this.options.templatesContainer).html(result).children();
423
+ },
424
+
425
+ _renderPreview: function (file, node) {
426
+ var that = this,
427
+ options = this.options,
428
+ dfd = $.Deferred();
429
+ return ((loadImage && loadImage(
430
+ file,
431
+ function (img) {
432
+ node.append(img);
433
+ that._forceReflow(node);
434
+ that._transition(node).done(function () {
435
+ dfd.resolveWith(node);
436
+ });
437
+ if (!$.contains(document.body, node[0])) {
438
+ // If the element is not part of the DOM,
439
+ // transition events are not triggered,
440
+ // so we have to resolve manually:
441
+ dfd.resolveWith(node);
442
+ }
443
+ },
444
+ {
445
+ maxWidth: options.previewMaxWidth,
446
+ maxHeight: options.previewMaxHeight,
447
+ canvas: options.previewAsCanvas
448
+ }
449
+ )) || dfd.resolveWith(node)) && dfd;
450
+ },
451
+
452
+ _renderPreviews: function (files, nodes) {
453
+ var that = this,
454
+ options = this.options;
455
+ nodes.find('.preview span').each(function (index, element) {
456
+ var file = files[index];
457
+ if (options.previewSourceFileTypes.test(file.type) &&
458
+ ($.type(options.previewSourceMaxFileSize) !== 'number' ||
459
+ file.size < options.previewSourceMaxFileSize)) {
460
+ that._processingQueue = that._processingQueue.pipe(function () {
461
+ var dfd = $.Deferred();
462
+ that._renderPreview(file, $(element)).done(
463
+ function () {
464
+ dfd.resolveWith(that);
465
+ }
466
+ );
467
+ return dfd.promise();
468
+ });
469
+ }
470
+ });
471
+ return this._processingQueue;
472
+ },
473
+
474
+ _renderUpload: function (files) {
475
+ return this._renderTemplate(
476
+ this.options.uploadTemplate,
477
+ files
478
+ );
479
+ },
480
+
481
+ _renderDownload: function (files) {
482
+ return this._renderTemplate(
483
+ this.options.downloadTemplate,
484
+ files
485
+ ).find('a[download]').each(this._enableDragToDesktop).end();
486
+ },
487
+
488
+ _startHandler: function (e) {
489
+ e.preventDefault();
490
+ var button = $(this),
491
+ template = button.closest('.template-upload'),
492
+ data = template.data('data');
493
+ if (data && data.submit && !data.jqXHR && data.submit()) {
494
+ button.prop('disabled', true);
495
+ }
496
+ },
497
+
498
+ _cancelHandler: function (e) {
499
+ e.preventDefault();
500
+ var template = $(this).closest('.template-upload'),
501
+ data = template.data('data') || {};
502
+ if (!data.jqXHR) {
503
+ data.errorThrown = 'abort';
504
+ e.data.fileupload._trigger('fail', e, data);
505
+ } else {
506
+ data.jqXHR.abort();
507
+ }
508
+ },
509
+
510
+ _deleteHandler: function (e) {
511
+ e.preventDefault();
512
+ var button = $(this);
513
+ e.data.fileupload._trigger('destroy', e, {
514
+ context: button.closest('.template-download'),
515
+ url: button.attr('data-url'),
516
+ type: button.attr('data-type') || 'DELETE',
517
+ dataType: e.data.fileupload.options.dataType
518
+ });
519
+ },
520
+
521
+ _forceReflow: function (node) {
522
+ this._reflow = $.support.transition &&
523
+ node.length && node[0].offsetWidth;
524
+ },
525
+
526
+ _transition: function (node) {
527
+ var dfd = $.Deferred();
528
+ if ($.support.transition && node.hasClass('fade')) {
529
+ node.bind(
530
+ $.support.transition.end,
531
+ function (e) {
532
+ // Make sure we don't respond to other transitions events
533
+ // in the container element, e.g. from button elements:
534
+ if (e.target === node[0]) {
535
+ node.unbind($.support.transition.end);
536
+ dfd.resolveWith(node);
537
+ }
538
+ }
539
+ ).toggleClass('in');
540
+ } else {
541
+ node.toggleClass('in');
542
+ dfd.resolveWith(node);
543
+ }
544
+ return dfd;
545
+ },
546
+
547
+ _initButtonBarEventHandlers: function () {
548
+ var fileUploadButtonBar = this.element.find('.fileupload-buttonbar'),
549
+ filesList = this.options.filesContainer,
550
+ ns = this.options.namespace;
551
+ fileUploadButtonBar.find('.start')
552
+ .bind('click.' + ns, function (e) {
553
+ e.preventDefault();
554
+ filesList.find('.start button').click();
555
+ });
556
+ fileUploadButtonBar.find('.cancel')
557
+ .bind('click.' + ns, function (e) {
558
+ e.preventDefault();
559
+ filesList.find('.cancel button').click();
560
+ });
561
+ fileUploadButtonBar.find('.delete')
562
+ .bind('click.' + ns, function (e) {
563
+ e.preventDefault();
564
+ filesList.find('.delete input:checked')
565
+ .siblings('button').click();
566
+ fileUploadButtonBar.find('.toggle')
567
+ .prop('checked', false);
568
+ });
569
+ fileUploadButtonBar.find('.toggle')
570
+ .bind('change.' + ns, function (e) {
571
+ filesList.find('.delete input').prop(
572
+ 'checked',
573
+ $(this).is(':checked')
574
+ );
575
+ });
576
+ },
577
+
578
+ _destroyButtonBarEventHandlers: function () {
579
+ this.element.find('.fileupload-buttonbar button')
580
+ .unbind('click.' + this.options.namespace);
581
+ this.element.find('.fileupload-buttonbar .toggle')
582
+ .unbind('change.' + this.options.namespace);
583
+ },
584
+
585
+ _initEventHandlers: function () {
586
+ parentWidget.prototype._initEventHandlers.call(this);
587
+ var eventData = {fileupload: this};
588
+ this.options.filesContainer
589
+ .delegate(
590
+ '.start button',
591
+ 'click.' + this.options.namespace,
592
+ eventData,
593
+ this._startHandler
594
+ )
595
+ .delegate(
596
+ '.cancel button',
597
+ 'click.' + this.options.namespace,
598
+ eventData,
599
+ this._cancelHandler
600
+ )
601
+ .delegate(
602
+ '.delete button',
603
+ 'click.' + this.options.namespace,
604
+ eventData,
605
+ this._deleteHandler
606
+ );
607
+ this._initButtonBarEventHandlers();
608
+ },
609
+
610
+ _destroyEventHandlers: function () {
611
+ var options = this.options;
612
+ this._destroyButtonBarEventHandlers();
613
+ options.filesContainer
614
+ .undelegate('.start button', 'click.' + options.namespace)
615
+ .undelegate('.cancel button', 'click.' + options.namespace)
616
+ .undelegate('.delete button', 'click.' + options.namespace);
617
+ parentWidget.prototype._destroyEventHandlers.call(this);
618
+ },
619
+
620
+ _enableFileInputButton: function () {
621
+ this.element.find('.fileinput-button input')
622
+ .prop('disabled', false)
623
+ .parent().removeClass('disabled');
624
+ },
625
+
626
+ _disableFileInputButton: function () {
627
+ this.element.find('.fileinput-button input')
628
+ .prop('disabled', true)
629
+ .parent().addClass('disabled');
630
+ },
631
+
632
+ _initTemplates: function () {
633
+ var options = this.options;
634
+ options.templatesContainer = document.createElement(
635
+ options.filesContainer.prop('nodeName')
636
+ );
637
+ if (tmpl) {
638
+ if (options.uploadTemplateId) {
639
+ options.uploadTemplate = tmpl(options.uploadTemplateId);
640
+ }
641
+ if (options.downloadTemplateId) {
642
+ options.downloadTemplate = tmpl(options.downloadTemplateId);
643
+ }
644
+ }
645
+ },
646
+
647
+ _initFilesContainer: function () {
648
+ var options = this.options;
649
+ if (options.filesContainer === undefined) {
650
+ options.filesContainer = this.element.find('.files');
651
+ } else if (!(options.filesContainer instanceof $)) {
652
+ options.filesContainer = $(options.filesContainer);
653
+ }
654
+ },
655
+
656
+ _initSpecialOptions: function () {
657
+ parentWidget.prototype._initSpecialOptions.call(this);
658
+ this._initFilesContainer();
659
+ this._initTemplates();
660
+ },
661
+
662
+ _create: function () {
663
+ parentWidget.prototype._create.call(this);
664
+ this._refreshOptionsList.push(
665
+ 'filesContainer',
666
+ 'uploadTemplateId',
667
+ 'downloadTemplateId'
668
+ );
669
+ if (!$.blueimpFP) {
670
+ this._processingQueue = $.Deferred().resolveWith(this).promise();
671
+ this.process = function () {
672
+ return this._processingQueue;
673
+ };
674
+ }
675
+ },
676
+
677
+ enable: function () {
678
+ parentWidget.prototype.enable.call(this);
679
+ this.element.find('input, button').prop('disabled', false);
680
+ this._enableFileInputButton();
681
+ },
682
+
683
+ disable: function () {
684
+ this.element.find('input, button').prop('disabled', true);
685
+ this._disableFileInputButton();
686
+ parentWidget.prototype.disable.call(this);
687
+ }
688
+
689
+ });
690
+
691
+ }));
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "it-logica-application-backbone"
8
- s.version = "0.1.4"
8
+ s.version = "0.1.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ladas"]
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
29
29
  "app/assets/javascripts/backbone_js/index.js",
30
30
  "app/assets/javascripts/backbone_js/jquery-ui-timepicker-cs.js",
31
31
  "app/assets/javascripts/backbone_js/jquery.cookie.js",
32
+ "app/assets/javascripts/backbone_js/jquery.fileupload-ui.js",
32
33
  "app/assets/javascripts/backbone_js/jquery.fileupload.js",
33
34
  "app/assets/javascripts/backbone_js/jquery.history.js",
34
35
  "app/assets/javascripts/backbone_js/jquery.hotkeys.js",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: it-logica-application-backbone
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-07-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: shoulda
16
- requirement: &71475210 !ruby/object:Gem::Requirement
16
+ requirement: &76072000 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *71475210
24
+ version_requirements: *76072000
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &71473400 !ruby/object:Gem::Requirement
27
+ requirement: &76071440 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.12'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *71473400
35
+ version_requirements: *76071440
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &71472860 !ruby/object:Gem::Requirement
38
+ requirement: &76087480 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.1.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *71472860
46
+ version_requirements: *76087480
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &71472330 !ruby/object:Gem::Requirement
49
+ requirement: &76086990 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.8.4
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *71472330
57
+ version_requirements: *76086990
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: simplecov
60
- requirement: &71471870 !ruby/object:Gem::Requirement
60
+ requirement: &76086550 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *71471870
68
+ version_requirements: *76086550
69
69
  description: longer description of your gem
70
70
  email: ladislav.smola@it-logica.cz
71
71
  executables: []
@@ -86,6 +86,7 @@ files:
86
86
  - app/assets/javascripts/backbone_js/index.js
87
87
  - app/assets/javascripts/backbone_js/jquery-ui-timepicker-cs.js
88
88
  - app/assets/javascripts/backbone_js/jquery.cookie.js
89
+ - app/assets/javascripts/backbone_js/jquery.fileupload-ui.js
89
90
  - app/assets/javascripts/backbone_js/jquery.fileupload.js
90
91
  - app/assets/javascripts/backbone_js/jquery.history.js
91
92
  - app/assets/javascripts/backbone_js/jquery.hotkeys.js
@@ -127,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
128
  version: '0'
128
129
  segments:
129
130
  - 0
130
- hash: 524553581
131
+ hash: 430671649
131
132
  required_rubygems_version: !ruby/object:Gem::Requirement
132
133
  none: false
133
134
  requirements: