cloudinary 1.0.85 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
1
  # Copyright Cloudinary
2
2
  module Cloudinary
3
- VERSION = "1.0.85"
3
+ VERSION = "1.1.0"
4
4
  end
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Cloudinary's jQuery library - v1.0.23
2
+ * Cloudinary's jQuery library - v1.0.24
3
3
  * Copyright Cloudinary
4
4
  * see https://github.com/cloudinary/cloudinary_js
5
5
  */
@@ -30,7 +30,8 @@
30
30
  var OLD_AKAMAI_SHARED_CDN = "cloudinary-a.akamaihd.net";
31
31
  var AKAMAI_SHARED_CDN = "res.cloudinary.com";
32
32
  var SHARED_CDN = AKAMAI_SHARED_CDN;
33
- var DEFAULT_POSTER_OPTIONS = { format: 'jpg', resource_type: 'video' }
33
+ var DEFAULT_POSTER_OPTIONS = { format: 'jpg', resource_type: 'video' };
34
+ var DEFAULT_VIDEO_SOURCE_TYPES = ['webm', 'mp4', 'ogv'];
34
35
  function utf8_encode (argString) {
35
36
  // http://kevin.vanzonneveld.net
36
37
  // + original by: Webtoolkit.info (http://www.webtoolkit.info/)
@@ -285,20 +286,30 @@
285
286
  return base_transformations.join("/");
286
287
  }
287
288
 
289
+ var number_pattern = "([0-9]*)\\.([0-9]+)|([0-9]+)";
290
+ var offset_any_pattern = "(" + number_pattern + ")([%pP])?";
291
+
288
292
  function split_range(range) {
289
- var ary = range;
290
- if(typeof range === 'string'){
291
- var offset_any_pattern = "(([0-9]*)\\.([0-9]+)|([0-9]+))([%pP])?"
292
- var offset_any_pattern_re = "("+offset_any_pattern+ ")\.\.("+offset_any_pattern+")";
293
- if (range.match(offset_any_pattern_re )){
294
- ary = range.split("..");
295
- }
293
+ var splitted;
294
+ switch(range.constructor){
295
+ case String:
296
+ var offset_any_pattern_re = "("+offset_any_pattern+ ")\.\.("+offset_any_pattern+")";
297
+ if (range.match(offset_any_pattern_re )){
298
+ splitted = range.split("..");
299
+ }
300
+ break;
301
+ case Array:
302
+ splitted = range;
303
+ break;
304
+ default :
305
+ splitted = [null, null];
306
+
296
307
  }
297
- return ary;
308
+ return splitted;
298
309
  }
299
310
 
300
311
  function norm_range_value(value) {
301
- var offset = value.match(new RegExp("^" + offset_any_pattern()+ "$"));
312
+ var offset = String(value).match(new RegExp("^" + offset_any_pattern+ "$"));
302
313
  if( offset){
303
314
  var modifier = present(offset[5]) ? 'p' : '';
304
315
  value = (offset[1] || offset[4]) + modifier;
@@ -306,14 +317,6 @@
306
317
  return value;
307
318
  }
308
319
 
309
- function number_pattern(){
310
- return "([0-9]*)\\.([0-9]+)|([0-9]+)";
311
- }
312
-
313
- function offset_any_pattern(){
314
- return "(" + number_pattern() + ")([%pP])?";
315
- }
316
-
317
320
  function absolutize(url) {
318
321
  if (!url.match(/^https?:\//)) {
319
322
  var prefix = document.location.protocol + "//" + document.location.host;
@@ -502,6 +505,23 @@
502
505
  return null;
503
506
  }
504
507
  }
508
+
509
+ function join_pair(key, value) {
510
+ if (!value) {
511
+ return undefined;
512
+ } else if (value === true) {
513
+ return key;
514
+ } else {
515
+ return key + "=\"" + value + "\"";
516
+ }
517
+ }
518
+
519
+ function html_attrs(attrs) {
520
+ var pairs = $.map(attrs, function(value, key) { return join_pair(key, value); });
521
+ pairs.sort();
522
+ return pairs.filter(function(pair){return pair;}).join(" ");
523
+ }
524
+
505
525
  var cloudinary_config = null;
506
526
  var responsive_config = null;
507
527
  var responsive_resize_initialized = false;
@@ -512,7 +532,6 @@
512
532
  OLD_AKAMAI_SHARED_CDN: OLD_AKAMAI_SHARED_CDN,
513
533
  AKAMAI_SHARED_CDN: AKAMAI_SHARED_CDN,
514
534
  SHARED_CDN: SHARED_CDN,
515
- DEFAULT_POSTER_OPTIONS: DEFAULT_POSTER_OPTIONS,
516
535
  config: function(new_config, new_value) {
517
536
  if (!cloudinary_config) {
518
537
  cloudinary_config = {};
@@ -538,7 +557,7 @@
538
557
  return cloudinary_url(public_id, options);
539
558
  },
540
559
  video_thumbnail_url: function(public_id, options) {
541
- options = $.extend(DEFAULT_POSTER_OPTIONS, options);
560
+ options = $.extend({}, DEFAULT_POSTER_OPTIONS, options);
542
561
  return cloudinary_url(public_id, options);
543
562
  },
544
563
  url_internal: cloudinary_url,
@@ -546,6 +565,13 @@
546
565
  options = $.extend({}, options);
547
566
  return generate_transformation_string(options);
548
567
  },
568
+ /**
569
+ * Generate an HTML image tag based on the public ID and options
570
+ * as a jQuery object. The tag is preinitialized with cloudinary functionality.
571
+ * @param {String} public_id the cloudinary resource ID
572
+ * @param {String} [options]
573
+ * @returns {jQuery} Image tag
574
+ */
549
575
  image: function(public_id, options) {
550
576
  options = $.extend({}, options);
551
577
  var url = prepare_html_url(public_id, options);
@@ -553,7 +579,8 @@
553
579
  return img;
554
580
  },
555
581
  video_thumbnail: function(public_id, options) {
556
- image(public_id, $.merge(DEFAULT_POSTER_OPTIONS, options));
582
+ options = $.extend({}, DEFAULT_POSTER_OPTIONS, options);
583
+ image(public_id, options);
557
584
  },
558
585
  facebook_profile_image: function(public_id, options) {
559
586
  return $.cloudinary.image(public_id, $.extend({type: 'facebook'}, options));
@@ -570,6 +597,76 @@
570
597
  fetch_image: function(public_id, options) {
571
598
  return $.cloudinary.image(public_id, $.extend({type: 'fetch'}, options));
572
599
  },
600
+ /**
601
+ * Creates an HTML video tag for the provided public_id
602
+ * @param {String} public_id the resource public ID
603
+ * @param {Object} [options] options for the resource and HTML tag
604
+ * @param {(String|Array<String>)} [options.source_types] Specify which
605
+ * source type the tag should include. defaults to webm, mp4 and ogv.
606
+ * @param {String} [options.source_transformation] specific transformations
607
+ * to use for a specific source type.
608
+ * @param {(String|Object)} [options.poster] image URL or
609
+ * poster options that may include a <tt>public_id</tt> key and
610
+ * poster-specific transformations
611
+ * @example <caption>Exmaple of generating a video tag:</caption>
612
+ * $.cloudinary.video("mymovie.mp4");
613
+ * $.cloudinary.video("mymovie.mp4", {source_types: 'webm'});
614
+ * $.cloudinary.video("mymovie.ogv", {poster: "myspecialplaceholder.jpg"});
615
+ * $.cloudinary.video("mymovie.webm", {source_types: ['webm', 'mp4'], poster: {effect: 'sepia'}});
616
+ * @return {string} HTML video tag
617
+ */
618
+ video: function(public_id, options) {
619
+ options = options || {};
620
+ public_id = public_id.replace(/\.(mp4|ogv|webm)$/, '');
621
+ var source_types = option_consume(options, 'source_types', []);
622
+ var source_transformation = option_consume(options, 'source_transformation', {});
623
+ var fallback = option_consume(options, 'fallback_content', '');
624
+
625
+ if (source_types.length == 0) source_types = DEFAULT_VIDEO_SOURCE_TYPES;
626
+ var video_options = $.extend(true, {}, options);
627
+
628
+ if (video_options.hasOwnProperty('poster')) {
629
+ if ($.isPlainObject(video_options.poster)) {
630
+ if (video_options.poster.hasOwnProperty('public_id')) {
631
+ video_options.poster = cloudinary_url(video_options.poster.public_id, video_options.poster);
632
+ } else {
633
+ video_options.poster = cloudinary_url(public_id, $.extend({}, DEFAULT_POSTER_OPTIONS, video_options.poster));
634
+ }
635
+ }
636
+ } else {
637
+ video_options.poster = cloudinary_url(public_id, $.extend({}, DEFAULT_POSTER_OPTIONS, options));
638
+ }
639
+
640
+ if (!video_options.poster) delete video_options.poster;
641
+
642
+ var html = '<video ';
643
+
644
+ if (!video_options.hasOwnProperty('resource_type')) video_options.resource_type = 'video';
645
+ var multi_source = $.isArray(source_types) && source_types.length > 1;
646
+ var source = public_id;
647
+ if (!multi_source){
648
+ source = source + '.' + build_array(source_types)[0];
649
+ }
650
+ var src = cloudinary_url(source, video_options);
651
+ if (!multi_source) video_options.src = src;
652
+ if (video_options.hasOwnProperty("html_width")) video_options.width = option_consume(video_options, 'html_width');
653
+ if (video_options.hasOwnProperty("html_height")) video_options.height = option_consume(video_options, 'html_height');
654
+ html = html + html_attrs(video_options) + '>';
655
+ if (multi_source) {
656
+ for(var i = 0; i < source_types.length; i++) {
657
+ var source_type = source_types[i];
658
+ var transformation = source_transformation[source_type] || {};
659
+ src = cloudinary_url(source + "." + source_type, $.extend(true, {resource_type: 'video'}, options, transformation));
660
+ var video_type = source_type == 'ogv' ? 'ogg' : source_type;
661
+ var mime_type = "video/" + video_type;
662
+ html = html + '<source '+ html_attrs({src: src, type: mime_type}) + '>';
663
+ }
664
+ }
665
+
666
+ html = html + fallback;
667
+ html = html + '</video>';
668
+ return html;
669
+ },
573
670
  sprite_css: function(public_id, options) {
574
671
  options = $.extend({type: 'sprite'}, options);
575
672
  if (!public_id.match(/.css$/)) options.format = 'css';
@@ -580,15 +677,16 @@
580
677
  * Use the following classes:
581
678
  * - cld-hidpi - only set dpr_auto
582
679
  * - cld-responsive - update both dpr_auto and w_auto
583
- * @param: options
584
- * - responsive_resize - should responsive images be updated on resize (default: true).
585
- * - responsive_debounce - if set, how many milliseconds after resize is done before the image is replaces (default: 100). Set to 0 to disable.
586
- * - responsive_use_stoppoints:
587
- * - true - always use stoppoints for width
588
- * - "resize" - use exact width on first render and stoppoints on resize (default)
589
- * - false - always use exact width
590
680
  * Stoppoints - to prevent creating a transformation for every pixel, stop-points can be configured. The smallest stop-point that is larger than
591
681
  * the wanted width will be used. The default stoppoints are all the multiples of 10. See calc_stoppoint for ways to override this.
682
+ * @param {Object} options
683
+ * @param {boolean} [options.responsive_resize=true] should responsive images be updated on resize (default: true).
684
+ * @param {integer} [options.responsive_debounce=100] if set, how many milliseconds after resize is done before the image is replaces (default: 100). Set to 0 to disable.
685
+ * @param {boolean|String} [options.responsive_use_stoppoints]
686
+ * <ul><li>true - always use stoppoints for width</li>
687
+ * <li>"resize" - use exact width on first render and stoppoints on resize (default)</li>
688
+ * <li>false - always use exact width</li></ul>
689
+ * @param {boolean} [options.responsive_preserve_height] if set to true, original css height is perserved. Should only be used if the transformation supports different aspect ratios.
592
690
  */
593
691
  responsive: function(options) {
594
692
  responsive_config = $.extend(responsive_config || {}, options);
@@ -667,15 +765,15 @@
667
765
 
668
766
  /**
669
767
  * Update hidpi (dpr_auto) and responsive (w_auto) fields according to the current container size and the device pixel ratio.
670
- * Only images marked with the cld-responsive class have w_auto updated.
671
- * options:
672
- * - responsive_use_stoppoints:
673
- * - true - always use stoppoints for width
674
- * - "resize" - use exact width on first render and stoppoints on resize (default)
675
- * - false - always use exact width
676
- * - responsive:
677
- * - true - enable responsive on this element. Can be done by adding cld-responsive.
678
- * Note that $.cloudinary.responsive() should be called once on the page.
768
+ * Only images marked with the <tt>cld-responsive</tt> class have w_auto updated.
769
+ * @param {Object} [options] Options
770
+ * @param {boolean|String} [options.responsive_use_stoppoints]
771
+ * <ul><li>true - always use stoppoints for width</li>
772
+ * <li>"resize" - use exact width on first render and stoppoints on resize (default)</li>
773
+ * <li>false - always use exact width</li></ul>
774
+ * @param {boolean} [options.responsive] if true, enable responsice on this element. Note that $.cloudinary.responsive() should be called once on the page.
775
+ * @param {boolean} [options.responsive_preserve_height] if set to true, original css height is perserved. Should only be used if the transformation supports different aspect ratios.
776
+ * @return {$.fn}
679
777
  */
680
778
  $.fn.cloudinary_update = function(options) {
681
779
  options = options || {};
@@ -700,8 +798,8 @@
700
798
 
701
799
  for (nthParent = 0; nthParent < parentsLength; nthParent+=1) {
702
800
  container = parents[nthParent];
703
- if (container && container.clientWidth) {
704
- containerWidth = container.clientWidth;
801
+ containerWidth = $(container).width();
802
+ if (containerWidth) {
705
803
  break;
706
804
  }
707
805
  }
@@ -721,7 +819,7 @@
721
819
  }
722
820
  src = src.replace(/\bw_auto\b/g, "w_" + requestedWidth);
723
821
  attrs.width = null;
724
- attrs.height = null;
822
+ if (!options.responsive_preserve_height) attrs.height = null;
725
823
  }
726
824
  // Update dpr according to the device's devicePixelRatio
727
825
  attrs.src = src.replace(/\bdpr_(1\.0|auto)\b/g, "dpr_" + $.cloudinary.device_pixel_ratio());
@@ -730,7 +828,6 @@
730
828
  return this;
731
829
  };
732
830
 
733
-
734
831
  var webp = null;
735
832
  $.fn.webpify = function(options, webp_options) {
736
833
  var that = this;
@@ -838,7 +935,9 @@
838
935
 
839
936
  if (!this.fileupload('option').url) {
840
937
  var cloud_name = options.cloud_name || $.cloudinary.config().cloud_name;
841
- var upload_url = "https://api.cloudinary.com/v1_1/" + cloud_name + "/upload";
938
+ var resource_type = options.resource_type || "auto";
939
+ var type = options.type || "upload";
940
+ var upload_url = "https://api.cloudinary.com/v1_1/" + cloud_name + "/" + resource_type + "/" + type;
842
941
  this.fileupload('option', 'url', upload_url);
843
942
  }
844
943
  }
@@ -855,9 +954,13 @@
855
954
  options = options || {};
856
955
  upload_params = $.extend({}, upload_params) || {};
857
956
 
858
- if (upload_params.cloud_name) {
859
- options.cloud_name = upload_params.cloud_name;
860
- delete upload_params.cloud_name;
957
+ var attrs_to_move = ["cloud_name", "resource_type", "type"];
958
+ for (var i = 0; i < attrs_to_move.length; i++) {
959
+ var attr = attrs_to_move[i];
960
+ if (upload_params[attr]) {
961
+ options[attr] = upload_params[attr];
962
+ delete upload_params[attr];
963
+ }
861
964
  }
862
965
 
863
966
  // Serialize upload_params
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudinary
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.85
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nadav Soferman
@@ -10,90 +10,90 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-04-08 00:00:00.000000000 Z
13
+ date: 2015-04-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: aws_cf_signer
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ! '>='
19
+ - - ">="
20
20
  - !ruby/object:Gem::Version
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - ! '>='
26
+ - - ">="
27
27
  - !ruby/object:Gem::Version
28
28
  version: '0'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rspec
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - ! '>='
33
+ - - ">="
34
34
  - !ruby/object:Gem::Version
35
- version: '2.11'
35
+ version: '3.2'
36
36
  type: :development
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - ! '>='
40
+ - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: '2.11'
42
+ version: '3.2'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: rspec-rails
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - ! '>='
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
49
  version: '0'
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - ! '>='
54
+ - - ">="
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: rest-client
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - ! '>='
61
+ - - ">="
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - ! '>='
68
+ - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: actionpack
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - ! '>='
75
+ - - ">="
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - ! '>='
82
+ - - ">="
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: simplecov
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - ! '>='
89
+ - - ">="
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - ! '>='
96
+ - - ">="
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  description: Client library for easily using the Cloudinary service
@@ -105,8 +105,8 @@ executables: []
105
105
  extensions: []
106
106
  extra_rdoc_files: []
107
107
  files:
108
- - .gitignore
109
- - .rspec
108
+ - ".gitignore"
109
+ - ".rspec"
110
110
  - CHANGELOG.md
111
111
  - Gemfile
112
112
  - README.md
@@ -169,17 +169,17 @@ require_paths:
169
169
  - lib
170
170
  required_ruby_version: !ruby/object:Gem::Requirement
171
171
  requirements:
172
- - - ! '>='
172
+ - - ">="
173
173
  - !ruby/object:Gem::Version
174
174
  version: '0'
175
175
  required_rubygems_version: !ruby/object:Gem::Requirement
176
176
  requirements:
177
- - - ! '>='
177
+ - - ">="
178
178
  - !ruby/object:Gem::Version
179
179
  version: '0'
180
180
  requirements: []
181
181
  rubyforge_project: cloudinary
182
- rubygems_version: 2.4.2
182
+ rubygems_version: 2.2.2
183
183
  signing_key:
184
184
  specification_version: 4
185
185
  summary: Client library for easily using the Cloudinary service