cropper_rails 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 582b46f8725bd29fe8a8162bf0c74d5954803c5811a3e6d19a0c3ad4e9d9c3c3
4
- data.tar.gz: 83aa2d33544e6afa0125da8dc5a1c7e26dcbcd5d470e641253fc49383782454b
3
+ metadata.gz: a48cf73eef4a56b9f3e4f8ac2194e85d67081e08c69ff1e3285117a903809847
4
+ data.tar.gz: cf99aed64a5e250797ee0d52c2ff0cb0085cd2f7fe2b724489170c6b6a3d5ea1
5
5
  SHA512:
6
- metadata.gz: be615203f8efbc328614ed19fe7240ee99ee4b29b514190e503fe2bea9736aae0cce878f9af7faf9161a22e01b3c685d148bc453fe78974409844bd1a1c6ddac
7
- data.tar.gz: ca64d45a21a3ab2b108ff44663e1b3d384f7c609204ea997f1c458872f5645afc5991f08dea92d2cb2817db813b807af6d4e32beaf36abc0691a8f4039efa0bb
6
+ metadata.gz: 8f2bd0297ff274f2b478f23251734d2a66e64a07f4901ce8b9c6a5d528b864ca32e28af51e3b90f49b9e1e41a1f676c40402b3aba7840881e80b8a0aba164133
7
+ data.tar.gz: 14bcc7f5181847b6435eb24b73bf3c2d4699cb7da97376a116f3484a97e9040a7612572021167a7a3927a1eb5542f6be28cacb806b3561f7eac0ec5271d022a3
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
- MIT License
1
+ The MIT License (MIT)
2
2
 
3
- Copyright (c) 2018 Fabien LEFEBVRE
3
+ Copyright 2015-present Chen Fengyuan
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -9,13 +9,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
9
  copies of the Software, and to permit persons to whom the Software is
10
10
  furnished to do so, subject to the following conditions:
11
11
 
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
14
 
15
15
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
16
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
17
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
18
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -2,6 +2,7 @@
2
2
 
3
3
  | Gem | Cropper.js | jQuery Cropper |
4
4
  |--------|------------|----------------|
5
+ | 1.1.0 | 1.5.6 | 1.0.1 |
5
6
  | 1.0.2 | 1.4.3 | 1.0.0 |
6
7
  | 1.0.1 | 1.4.2 | 1.0.0 |
7
8
  | 1.0.0 | 1.4.1 | 1.0.0 |
@@ -22,5 +22,5 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_runtime_dependency 'jquery-rails', '~> 4.0'
24
24
 
25
- spec.add_development_dependency 'bundler', '~> 1.16'
25
+ spec.add_development_dependency 'bundler', '~> 2.0'
26
26
  end
@@ -1,7 +1,7 @@
1
1
  module Cropper
2
2
  module Rails
3
- VERSION = '1.0.2'.freeze
4
- CROPPER_VERSION = '1.4.3'.freeze
5
- JQUERY_CROPPER_VERSION = '1.0.0'.freeze
3
+ VERSION = '1.1.0'.freeze
4
+ CROPPER_VERSION = '1.5.6'.freeze
5
+ JQUERY_CROPPER_VERSION = '1.0.1'.freeze
6
6
  end
7
7
  end
@@ -1,18 +1,18 @@
1
1
  /*!
2
- * Cropper.js v1.4.3
2
+ * Cropper.js v1.5.6
3
3
  * https://fengyuanchen.github.io/cropperjs
4
4
  *
5
5
  * Copyright 2015-present Chen Fengyuan
6
6
  * Released under the MIT license
7
7
  *
8
- * Date: 2018-10-24T13:07:15.032Z
8
+ * Date: 2019-10-04T04:33:48.372Z
9
9
  */
10
10
 
11
11
  (function (global, factory) {
12
12
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
13
13
  typeof define === 'function' && define.amd ? define(factory) :
14
- (global.Cropper = factory());
15
- }(this, (function () { 'use strict';
14
+ (global = global || self, global.Cropper = factory());
15
+ }(this, function () { 'use strict';
16
16
 
17
17
  function _typeof(obj) {
18
18
  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
@@ -50,6 +50,55 @@
50
50
  return Constructor;
51
51
  }
52
52
 
53
+ function _defineProperty(obj, key, value) {
54
+ if (key in obj) {
55
+ Object.defineProperty(obj, key, {
56
+ value: value,
57
+ enumerable: true,
58
+ configurable: true,
59
+ writable: true
60
+ });
61
+ } else {
62
+ obj[key] = value;
63
+ }
64
+
65
+ return obj;
66
+ }
67
+
68
+ function ownKeys(object, enumerableOnly) {
69
+ var keys = Object.keys(object);
70
+
71
+ if (Object.getOwnPropertySymbols) {
72
+ var symbols = Object.getOwnPropertySymbols(object);
73
+ if (enumerableOnly) symbols = symbols.filter(function (sym) {
74
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
75
+ });
76
+ keys.push.apply(keys, symbols);
77
+ }
78
+
79
+ return keys;
80
+ }
81
+
82
+ function _objectSpread2(target) {
83
+ for (var i = 1; i < arguments.length; i++) {
84
+ var source = arguments[i] != null ? arguments[i] : {};
85
+
86
+ if (i % 2) {
87
+ ownKeys(source, true).forEach(function (key) {
88
+ _defineProperty(target, key, source[key]);
89
+ });
90
+ } else if (Object.getOwnPropertyDescriptors) {
91
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
92
+ } else {
93
+ ownKeys(source).forEach(function (key) {
94
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
95
+ });
96
+ }
97
+ }
98
+
99
+ return target;
100
+ }
101
+
53
102
  function _toConsumableArray(arr) {
54
103
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
55
104
  }
@@ -70,8 +119,10 @@
70
119
  throw new TypeError("Invalid attempt to spread non-iterable instance");
71
120
  }
72
121
 
73
- var IN_BROWSER = typeof window !== 'undefined';
74
- var WINDOW = IN_BROWSER ? window : {};
122
+ var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';
123
+ var WINDOW = IS_BROWSER ? window : {};
124
+ var IS_TOUCH_DEVICE = IS_BROWSER ? 'ontouchstart' in WINDOW.document.documentElement : false;
125
+ var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;
75
126
  var NAMESPACE = 'cropper'; // Actions
76
127
 
77
128
  var ACTION_ALL = 'all';
@@ -107,20 +158,27 @@
107
158
  var EVENT_CROP_MOVE = 'cropmove';
108
159
  var EVENT_CROP_START = 'cropstart';
109
160
  var EVENT_DBLCLICK = 'dblclick';
110
- var EVENT_POINTER_DOWN = WINDOW.PointerEvent ? 'pointerdown' : 'touchstart mousedown';
111
- var EVENT_POINTER_MOVE = WINDOW.PointerEvent ? 'pointermove' : 'touchmove mousemove';
112
- var EVENT_POINTER_UP = WINDOW.PointerEvent ? 'pointerup pointercancel' : 'touchend touchcancel mouseup';
161
+ var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';
162
+ var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';
163
+ var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';
164
+ var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;
165
+ var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;
166
+ var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;
113
167
  var EVENT_READY = 'ready';
114
168
  var EVENT_RESIZE = 'resize';
115
- var EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll';
169
+ var EVENT_WHEEL = 'wheel';
116
170
  var EVENT_ZOOM = 'zoom'; // Mime types
117
171
 
118
172
  var MIME_TYPE_JPEG = 'image/jpeg'; // RegExps
119
173
 
120
- var REGEXP_ACTIONS = /^(?:e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/;
174
+ var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;
121
175
  var REGEXP_DATA_URL = /^data:/;
122
176
  var REGEXP_DATA_URL_JPEG = /^data:image\/jpeg;base64,/;
123
- var REGEXP_TAG_NAME = /^(?:img|canvas)$/i;
177
+ var REGEXP_TAG_NAME = /^img|canvas$/i; // Misc
178
+ // Inspired by the default width and height of a canvas element.
179
+
180
+ var MIN_CONTAINER_WIDTH = 200;
181
+ var MIN_CONTAINER_HEIGHT = 100;
124
182
 
125
183
  var DEFAULTS = {
126
184
  // Define the view mode of the cropper
@@ -211,6 +269,15 @@
211
269
  function isNumber(value) {
212
270
  return typeof value === 'number' && !isNaN(value);
213
271
  }
272
+ /**
273
+ * Check if the given value is a positive number.
274
+ * @param {*} value - The value to check.
275
+ * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.
276
+ */
277
+
278
+ var isPositiveNumber = function isPositiveNumber(value) {
279
+ return value > 0 && value < Infinity;
280
+ };
214
281
  /**
215
282
  * Check if the given value is undefined.
216
283
  * @param {*} value - The value to check.
@@ -245,7 +312,7 @@
245
312
  var _constructor = value.constructor;
246
313
  var prototype = _constructor.prototype;
247
314
  return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');
248
- } catch (e) {
315
+ } catch (error) {
249
316
  return false;
250
317
  }
251
318
  }
@@ -258,6 +325,16 @@
258
325
  function isFunction(value) {
259
326
  return typeof value === 'function';
260
327
  }
328
+ var slice = Array.prototype.slice;
329
+ /**
330
+ * Convert array-like or iterable object to an array.
331
+ * @param {*} value - The value to convert.
332
+ * @returns {Array} Returns a new array.
333
+ */
334
+
335
+ function toArray(value) {
336
+ return Array.from ? Array.from(value) : slice.call(value);
337
+ }
261
338
  /**
262
339
  * Iterate the given data.
263
340
  * @param {*} data - The data to iterate.
@@ -270,14 +347,9 @@
270
347
  if (Array.isArray(data) || isNumber(data.length)
271
348
  /* array-like */
272
349
  ) {
273
- var length = data.length;
274
- var i;
275
-
276
- for (i = 0; i < length; i += 1) {
277
- if (callback.call(data, data[i], i, data) === false) {
278
- break;
279
- }
280
- }
350
+ toArray(data).forEach(function (value, key) {
351
+ callback.call(data, value, key, data);
352
+ });
281
353
  } else if (isObject(data)) {
282
354
  Object.keys(data).forEach(function (key) {
283
355
  callback.call(data, data[key], key, data);
@@ -289,27 +361,27 @@
289
361
  }
290
362
  /**
291
363
  * Extend the given object.
292
- * @param {*} obj - The object to be extended.
293
- * @param {*} args - The rest objects which will be merged to the first object.
364
+ * @param {*} target - The target object to extend.
365
+ * @param {*} args - The rest objects for merging to the target object.
294
366
  * @returns {Object} The extended object.
295
367
  */
296
368
 
297
- var assign = Object.assign || function assign(obj) {
369
+ var assign = Object.assign || function assign(target) {
298
370
  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
299
371
  args[_key - 1] = arguments[_key];
300
372
  }
301
373
 
302
- if (isObject(obj) && args.length > 0) {
374
+ if (isObject(target) && args.length > 0) {
303
375
  args.forEach(function (arg) {
304
376
  if (isObject(arg)) {
305
377
  Object.keys(arg).forEach(function (key) {
306
- obj[key] = arg[key];
378
+ target[key] = arg[key];
307
379
  });
308
380
  }
309
381
  });
310
382
  }
311
383
 
312
- return obj;
384
+ return target;
313
385
  };
314
386
  var REGEXP_DECIMALS = /\.\d*(?:0|9){12}\d*$/;
315
387
  /**
@@ -324,7 +396,7 @@
324
396
  var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;
325
397
  return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;
326
398
  }
327
- var REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/;
399
+ var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;
328
400
  /**
329
401
  * Apply styles to the given element.
330
402
  * @param {Element} element - The target element.
@@ -335,7 +407,7 @@
335
407
  var style = element.style;
336
408
  forEach(styles, function (value, property) {
337
409
  if (REGEXP_SUFFIX.test(property) && isNumber(value)) {
338
- value += 'px';
410
+ value = "".concat(value, "px");
339
411
  }
340
412
 
341
413
  style[property] = value;
@@ -435,15 +507,15 @@
435
507
  removeClass(element, value);
436
508
  }
437
509
  }
438
- var REGEXP_HYPHENATE = /([a-z\d])([A-Z])/g;
510
+ var REGEXP_CAMEL_CASE = /([a-z\d])([A-Z])/g;
439
511
  /**
440
512
  * Transform the given string from camelCase to kebab-case
441
513
  * @param {string} value - The value to transform.
442
514
  * @returns {string} The transformed value.
443
515
  */
444
516
 
445
- function hyphenate(value) {
446
- return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase();
517
+ function toParamCase(value) {
518
+ return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();
447
519
  }
448
520
  /**
449
521
  * Get data from the given element.
@@ -461,7 +533,7 @@
461
533
  return element.dataset[name];
462
534
  }
463
535
 
464
- return element.getAttribute("data-".concat(hyphenate(name)));
536
+ return element.getAttribute("data-".concat(toParamCase(name)));
465
537
  }
466
538
  /**
467
539
  * Set data to the given element.
@@ -476,7 +548,7 @@
476
548
  } else if (element.dataset) {
477
549
  element.dataset[name] = data;
478
550
  } else {
479
- element.setAttribute("data-".concat(hyphenate(name)), data);
551
+ element.setAttribute("data-".concat(toParamCase(name)), data);
480
552
  }
481
553
  }
482
554
  /**
@@ -489,18 +561,18 @@
489
561
  if (isObject(element[name])) {
490
562
  try {
491
563
  delete element[name];
492
- } catch (e) {
564
+ } catch (error) {
493
565
  element[name] = undefined;
494
566
  }
495
567
  } else if (element.dataset) {
496
568
  // #128 Safari not allows to delete dataset property
497
569
  try {
498
570
  delete element.dataset[name];
499
- } catch (e) {
571
+ } catch (error) {
500
572
  element.dataset[name] = undefined;
501
573
  }
502
574
  } else {
503
- element.removeAttribute("data-".concat(hyphenate(name)));
575
+ element.removeAttribute("data-".concat(toParamCase(name)));
504
576
  }
505
577
  }
506
578
  var REGEXP_SPACES = /\s\s*/;
@@ -508,7 +580,7 @@
508
580
  var onceSupported = function () {
509
581
  var supported = false;
510
582
 
511
- if (IN_BROWSER) {
583
+ if (IS_BROWSER) {
512
584
  var once = false;
513
585
 
514
586
  var listener = function listener() {};
@@ -647,7 +719,7 @@
647
719
  };
648
720
  }
649
721
  var location = WINDOW.location;
650
- var REGEXP_ORIGINS = /^(https?:)\/\/([^:/?#]+):?(\d*)/i;
722
+ var REGEXP_ORIGINS = /^(\w+:)\/\/([^:/?#]*):?(\d*)/i;
651
723
  /**
652
724
  * Check if the given URL is a cross origin URL.
653
725
  * @param {string} url - The target URL.
@@ -656,7 +728,7 @@
656
728
 
657
729
  function isCrossOriginURL(url) {
658
730
  var parts = url.match(REGEXP_ORIGINS);
659
- return parts && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);
731
+ return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);
660
732
  }
661
733
  /**
662
734
  * Add timestamp to the given URL.
@@ -717,7 +789,8 @@
717
789
  */
718
790
 
719
791
  function getMaxZoomRatio(pointers) {
720
- var pointers2 = assign({}, pointers);
792
+ var pointers2 = _objectSpread2({}, pointers);
793
+
721
794
  var ratios = [];
722
795
  forEach(pointers, function (pointer, pointerId) {
723
796
  delete pointers2[pointerId];
@@ -751,7 +824,7 @@
751
824
  endX: pageX,
752
825
  endY: pageY
753
826
  };
754
- return endOnly ? end : assign({
827
+ return endOnly ? end : _objectSpread2({
755
828
  startX: pageX,
756
829
  startY: pageY
757
830
  }, end);
@@ -780,11 +853,6 @@
780
853
  pageY: pageY
781
854
  };
782
855
  }
783
- /**
784
- * Check if the given value is a finite number.
785
- */
786
-
787
- var isFinite = Number.isFinite || WINDOW.isFinite;
788
856
  /**
789
857
  * Get the max sizes in a rectangle under the given aspect ratio.
790
858
  * @param {Object} data - The original sizes.
@@ -798,12 +866,10 @@
798
866
  height = _ref4.height,
799
867
  width = _ref4.width;
800
868
  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';
869
+ var isValidWidth = isPositiveNumber(width);
870
+ var isValidHeight = isPositiveNumber(height);
801
871
 
802
- var isValidNumber = function isValidNumber(value) {
803
- return isFinite(value) && value > 0;
804
- };
805
-
806
- if (isValidNumber(width) && isValidNumber(height)) {
872
+ if (isValidWidth && isValidHeight) {
807
873
  var adjustedWidth = height * aspectRatio;
808
874
 
809
875
  if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {
@@ -811,9 +877,9 @@
811
877
  } else {
812
878
  width = height * aspectRatio;
813
879
  }
814
- } else if (isValidNumber(width)) {
880
+ } else if (isValidWidth) {
815
881
  height = width / aspectRatio;
816
- } else if (isValidNumber(height)) {
882
+ } else if (isValidHeight) {
817
883
  width = height * aspectRatio;
818
884
  }
819
885
 
@@ -946,10 +1012,9 @@
946
1012
 
947
1013
  function getStringFromCharCode(dataView, start, length) {
948
1014
  var str = '';
949
- var i;
950
1015
  length += start;
951
1016
 
952
- for (i = start; i < length; i += 1) {
1017
+ for (var i = start; i < length; i += 1) {
953
1018
  str += fromCharCode(dataView.getUint8(i));
954
1019
  }
955
1020
 
@@ -980,12 +1045,15 @@
980
1045
  */
981
1046
 
982
1047
  function arrayBufferToDataURL(arrayBuffer, mimeType) {
983
- var chunks = [];
1048
+ var chunks = []; // Chunk Typed Array for better performance (#435)
1049
+
984
1050
  var chunkSize = 8192;
985
1051
  var uint8 = new Uint8Array(arrayBuffer);
986
1052
 
987
1053
  while (uint8.length > 0) {
988
- chunks.push(fromCharCode.apply(void 0, _toConsumableArray(uint8.subarray(0, chunkSize))));
1054
+ // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9
1055
+ // eslint-disable-next-line prefer-spread
1056
+ chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));
989
1057
  uint8 = uint8.subarray(chunkSize);
990
1058
  }
991
1059
 
@@ -1065,7 +1133,7 @@
1065
1133
  }
1066
1134
  }
1067
1135
  }
1068
- } catch (e) {
1136
+ } catch (error) {
1069
1137
  orientation = 1;
1070
1138
  }
1071
1139
 
@@ -1507,9 +1575,11 @@
1507
1575
 
1508
1576
  var preview = {
1509
1577
  initPreview: function initPreview() {
1510
- var crossOrigin = this.crossOrigin;
1578
+ var element = this.element,
1579
+ crossOrigin = this.crossOrigin;
1511
1580
  var preview = this.options.preview;
1512
1581
  var url = crossOrigin ? this.crossOriginUrl : this.url;
1582
+ var alt = element.alt || 'The image to preview';
1513
1583
  var image = document.createElement('img');
1514
1584
 
1515
1585
  if (crossOrigin) {
@@ -1517,6 +1587,7 @@
1517
1587
  }
1518
1588
 
1519
1589
  image.src = url;
1590
+ image.alt = alt;
1520
1591
  this.viewBox.appendChild(image);
1521
1592
  this.viewBoxImage = image;
1522
1593
 
@@ -1527,7 +1598,7 @@
1527
1598
  var previews = preview;
1528
1599
 
1529
1600
  if (typeof preview === 'string') {
1530
- previews = this.element.ownerDocument.querySelectorAll(preview);
1601
+ previews = element.ownerDocument.querySelectorAll(preview);
1531
1602
  } else if (preview.querySelector) {
1532
1603
  previews = [preview];
1533
1604
  }
@@ -1547,6 +1618,7 @@
1547
1618
  }
1548
1619
 
1549
1620
  img.src = url;
1621
+ img.alt = alt;
1550
1622
  /**
1551
1623
  * Override img element styles
1552
1624
  * Add `display:block` to avoid margin top issue
@@ -1655,7 +1727,10 @@
1655
1727
  addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));
1656
1728
 
1657
1729
  if (options.zoomable && options.zoomOnWheel) {
1658
- addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this));
1730
+ addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {
1731
+ passive: false,
1732
+ capture: true
1733
+ });
1659
1734
  }
1660
1735
 
1661
1736
  if (options.toggleDragModeOnDblclick) {
@@ -1697,7 +1772,10 @@
1697
1772
  removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);
1698
1773
 
1699
1774
  if (options.zoomable && options.zoomOnWheel) {
1700
- removeListener(cropper, EVENT_WHEEL, this.onWheel);
1775
+ removeListener(cropper, EVENT_WHEEL, this.onWheel, {
1776
+ passive: false,
1777
+ capture: true
1778
+ });
1701
1779
  }
1702
1780
 
1703
1781
  if (options.toggleDragModeOnDblclick) {
@@ -1718,8 +1796,8 @@
1718
1796
  var options = this.options,
1719
1797
  container = this.container,
1720
1798
  containerData = this.containerData;
1721
- var minContainerWidth = Number(options.minContainerWidth) || 200;
1722
- var minContainerHeight = Number(options.minContainerHeight) || 100;
1799
+ var minContainerWidth = Number(options.minContainerWidth) || MIN_CONTAINER_WIDTH;
1800
+ var minContainerHeight = Number(options.minContainerHeight) || MIN_CONTAINER_HEIGHT;
1723
1801
 
1724
1802
  if (this.disabled || containerData.width <= minContainerWidth || containerData.height <= minContainerHeight) {
1725
1803
  return;
@@ -1755,7 +1833,7 @@
1755
1833
 
1756
1834
  this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);
1757
1835
  },
1758
- wheel: function wheel(e) {
1836
+ wheel: function wheel(event) {
1759
1837
  var _this = this;
1760
1838
 
1761
1839
  var ratio = Number(this.options.wheelZoomRatio) || 0.1;
@@ -1765,7 +1843,7 @@
1765
1843
  return;
1766
1844
  }
1767
1845
 
1768
- e.preventDefault(); // Limit wheel speed to prevent zoom too fast (#21)
1846
+ event.preventDefault(); // Limit wheel speed to prevent zoom too fast (#21)
1769
1847
 
1770
1848
  if (this.wheeling) {
1771
1849
  return;
@@ -1776,18 +1854,24 @@
1776
1854
  _this.wheeling = false;
1777
1855
  }, 50);
1778
1856
 
1779
- if (e.deltaY) {
1780
- delta = e.deltaY > 0 ? 1 : -1;
1781
- } else if (e.wheelDelta) {
1782
- delta = -e.wheelDelta / 120;
1783
- } else if (e.detail) {
1784
- delta = e.detail > 0 ? 1 : -1;
1857
+ if (event.deltaY) {
1858
+ delta = event.deltaY > 0 ? 1 : -1;
1859
+ } else if (event.wheelDelta) {
1860
+ delta = -event.wheelDelta / 120;
1861
+ } else if (event.detail) {
1862
+ delta = event.detail > 0 ? 1 : -1;
1785
1863
  }
1786
1864
 
1787
- this.zoom(-delta * ratio, e);
1865
+ this.zoom(-delta * ratio, event);
1788
1866
  },
1789
- cropStart: function cropStart(e) {
1790
- if (this.disabled) {
1867
+ cropStart: function cropStart(event) {
1868
+ var buttons = event.buttons,
1869
+ button = event.button;
1870
+
1871
+ if (this.disabled // Handle mouse event and pointer event and ignore touch event
1872
+ || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && ( // No primary button (Usually the left button)
1873
+ isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0 // Open context menu
1874
+ || event.ctrlKey)) {
1791
1875
  return;
1792
1876
  }
1793
1877
 
@@ -1795,20 +1879,20 @@
1795
1879
  pointers = this.pointers;
1796
1880
  var action;
1797
1881
 
1798
- if (e.changedTouches) {
1882
+ if (event.changedTouches) {
1799
1883
  // Handle touch event
1800
- forEach(e.changedTouches, function (touch) {
1884
+ forEach(event.changedTouches, function (touch) {
1801
1885
  pointers[touch.identifier] = getPointer(touch);
1802
1886
  });
1803
1887
  } else {
1804
1888
  // Handle mouse event and pointer event
1805
- pointers[e.pointerId || 0] = getPointer(e);
1889
+ pointers[event.pointerId || 0] = getPointer(event);
1806
1890
  }
1807
1891
 
1808
1892
  if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {
1809
1893
  action = ACTION_ZOOM;
1810
1894
  } else {
1811
- action = getData(e.target, DATA_ACTION);
1895
+ action = getData(event.target, DATA_ACTION);
1812
1896
  }
1813
1897
 
1814
1898
  if (!REGEXP_ACTIONS.test(action)) {
@@ -1816,14 +1900,14 @@
1816
1900
  }
1817
1901
 
1818
1902
  if (dispatchEvent(this.element, EVENT_CROP_START, {
1819
- originalEvent: e,
1903
+ originalEvent: event,
1820
1904
  action: action
1821
1905
  }) === false) {
1822
1906
  return;
1823
1907
  } // This line is required for preventing page zooming in iOS browsers
1824
1908
 
1825
1909
 
1826
- e.preventDefault();
1910
+ event.preventDefault();
1827
1911
  this.action = action;
1828
1912
  this.cropping = false;
1829
1913
 
@@ -1832,7 +1916,7 @@
1832
1916
  addClass(this.dragBox, CLASS_MODAL);
1833
1917
  }
1834
1918
  },
1835
- cropMove: function cropMove(e) {
1919
+ cropMove: function cropMove(event) {
1836
1920
  var action = this.action;
1837
1921
 
1838
1922
  if (this.disabled || !action) {
@@ -1840,27 +1924,27 @@
1840
1924
  }
1841
1925
 
1842
1926
  var pointers = this.pointers;
1843
- e.preventDefault();
1927
+ event.preventDefault();
1844
1928
 
1845
1929
  if (dispatchEvent(this.element, EVENT_CROP_MOVE, {
1846
- originalEvent: e,
1930
+ originalEvent: event,
1847
1931
  action: action
1848
1932
  }) === false) {
1849
1933
  return;
1850
1934
  }
1851
1935
 
1852
- if (e.changedTouches) {
1853
- forEach(e.changedTouches, function (touch) {
1936
+ if (event.changedTouches) {
1937
+ forEach(event.changedTouches, function (touch) {
1854
1938
  // The first parameter should not be undefined (#432)
1855
1939
  assign(pointers[touch.identifier] || {}, getPointer(touch, true));
1856
1940
  });
1857
1941
  } else {
1858
- assign(pointers[e.pointerId || 0] || {}, getPointer(e, true));
1942
+ assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));
1859
1943
  }
1860
1944
 
1861
- this.change(e);
1945
+ this.change(event);
1862
1946
  },
1863
- cropEnd: function cropEnd(e) {
1947
+ cropEnd: function cropEnd(event) {
1864
1948
  if (this.disabled) {
1865
1949
  return;
1866
1950
  }
@@ -1868,19 +1952,19 @@
1868
1952
  var action = this.action,
1869
1953
  pointers = this.pointers;
1870
1954
 
1871
- if (e.changedTouches) {
1872
- forEach(e.changedTouches, function (touch) {
1955
+ if (event.changedTouches) {
1956
+ forEach(event.changedTouches, function (touch) {
1873
1957
  delete pointers[touch.identifier];
1874
1958
  });
1875
1959
  } else {
1876
- delete pointers[e.pointerId || 0];
1960
+ delete pointers[event.pointerId || 0];
1877
1961
  }
1878
1962
 
1879
1963
  if (!action) {
1880
1964
  return;
1881
1965
  }
1882
1966
 
1883
- e.preventDefault();
1967
+ event.preventDefault();
1884
1968
 
1885
1969
  if (!Object.keys(pointers).length) {
1886
1970
  this.action = '';
@@ -1892,14 +1976,14 @@
1892
1976
  }
1893
1977
 
1894
1978
  dispatchEvent(this.element, EVENT_CROP_END, {
1895
- originalEvent: e,
1979
+ originalEvent: event,
1896
1980
  action: action
1897
1981
  });
1898
1982
  }
1899
1983
  };
1900
1984
 
1901
1985
  var change = {
1902
- change: function change(e) {
1986
+ change: function change(event) {
1903
1987
  var options = this.options,
1904
1988
  canvasData = this.canvasData,
1905
1989
  containerData = this.containerData,
@@ -1920,7 +2004,7 @@
1920
2004
  var renderable = true;
1921
2005
  var offset; // Locking aspect ratio in "free mode" by holding shift key
1922
2006
 
1923
- if (!aspectRatio && e.shiftKey) {
2007
+ if (!aspectRatio && event.shiftKey) {
1924
2008
  aspectRatio = width && height ? width / height : 1;
1925
2009
  }
1926
2010
 
@@ -2293,7 +2377,7 @@
2293
2377
  // Zoom canvas
2294
2378
 
2295
2379
  case ACTION_ZOOM:
2296
- this.zoom(getMaxZoomRatio(pointers), e);
2380
+ this.zoom(getMaxZoomRatio(pointers), event);
2297
2381
  renderable = false;
2298
2382
  break;
2299
2383
  // Create crop box
@@ -2685,7 +2769,7 @@
2685
2769
  * @param {boolean} [rounded=false] - Indicate if round the data values or not.
2686
2770
  * @returns {Object} The result cropped data.
2687
2771
  */
2688
- getData: function getData$$1() {
2772
+ getData: function getData() {
2689
2773
  var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
2690
2774
  var options = this.options,
2691
2775
  imageData = this.imageData,
@@ -2741,7 +2825,7 @@
2741
2825
  * @param {Object} data - The new data.
2742
2826
  * @returns {Cropper} this
2743
2827
  */
2744
- setData: function setData$$1(data) {
2828
+ setData: function setData(data) {
2745
2829
  var options = this.options,
2746
2830
  imageData = this.imageData,
2747
2831
  canvasData = this.canvasData;
@@ -3198,28 +3282,38 @@
3198
3282
  if (!options.checkOrientation || !window.ArrayBuffer) {
3199
3283
  this.clone();
3200
3284
  return;
3201
- } // XMLHttpRequest disallows to open a Data URL in some browsers like IE11 and Safari
3285
+ } // Detect the mime type of the image directly if it is a Data URL
3202
3286
 
3203
3287
 
3204
3288
  if (REGEXP_DATA_URL.test(url)) {
3289
+ // Read ArrayBuffer from Data URL of JPEG images directly for better performance
3205
3290
  if (REGEXP_DATA_URL_JPEG.test(url)) {
3206
3291
  this.read(dataURLToArrayBuffer(url));
3207
3292
  } else {
3293
+ // Only a JPEG image may contains Exif Orientation information,
3294
+ // the rest types of Data URLs are not necessary to check orientation at all.
3208
3295
  this.clone();
3209
3296
  }
3210
3297
 
3211
3298
  return;
3212
- }
3299
+ } // 1. Detect the mime type of the image by a XMLHttpRequest.
3300
+ // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.
3301
+
3213
3302
 
3214
3303
  var xhr = new XMLHttpRequest();
3215
3304
  var clone = this.clone.bind(this);
3216
3305
  this.reloading = true;
3217
- this.xhr = xhr;
3218
- xhr.ontimeout = clone;
3306
+ this.xhr = xhr; // 1. Cross origin requests are only supported for protocol schemes:
3307
+ // http, https, data, chrome, chrome-extension.
3308
+ // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy
3309
+ // in some browsers as IE11 and Safari.
3310
+
3219
3311
  xhr.onabort = clone;
3220
3312
  xhr.onerror = clone;
3313
+ xhr.ontimeout = clone;
3221
3314
 
3222
3315
  xhr.onprogress = function () {
3316
+ // Abort the request directly if it not a JPEG image for better performance
3223
3317
  if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {
3224
3318
  xhr.abort();
3225
3319
  }
@@ -3248,15 +3342,16 @@
3248
3342
  key: "read",
3249
3343
  value: function read(arrayBuffer) {
3250
3344
  var options = this.options,
3251
- imageData = this.imageData;
3345
+ imageData = this.imageData; // Reset the orientation value to its default value 1
3346
+ // as some iOS browsers will render image with its orientation
3347
+
3252
3348
  var orientation = resetAndGetOrientation(arrayBuffer);
3253
3349
  var rotate = 0;
3254
3350
  var scaleX = 1;
3255
3351
  var scaleY = 1;
3256
3352
 
3257
3353
  if (orientation > 1) {
3258
- // Generate a new Data URL with the orientation value set to 1
3259
- // as some iOS browsers will render image with its orientation
3354
+ // Generate a new URL which has the default orientation value
3260
3355
  this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);
3261
3356
 
3262
3357
  var _parseOrientation = parseOrientation(orientation);
@@ -3282,19 +3377,16 @@
3282
3377
  value: function clone() {
3283
3378
  var element = this.element,
3284
3379
  url = this.url;
3285
- var crossOrigin;
3286
- var crossOriginUrl;
3380
+ var crossOrigin = element.crossOrigin;
3381
+ var crossOriginUrl = url;
3287
3382
 
3288
3383
  if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {
3289
- crossOrigin = element.crossOrigin;
3384
+ if (!crossOrigin) {
3385
+ crossOrigin = 'anonymous';
3386
+ } // Bust cache when there is not a "crossOrigin" property (#519)
3290
3387
 
3291
- if (crossOrigin) {
3292
- crossOriginUrl = url;
3293
- } else {
3294
- crossOrigin = 'anonymous'; // Bust cache when there is not a "crossOrigin" property
3295
3388
 
3296
- crossOriginUrl = addTimestamp(url);
3297
- }
3389
+ crossOriginUrl = addTimestamp(url);
3298
3390
  }
3299
3391
 
3300
3392
  this.crossOrigin = crossOrigin;
@@ -3306,6 +3398,7 @@
3306
3398
  }
3307
3399
 
3308
3400
  image.src = crossOriginUrl || url;
3401
+ image.alt = element.alt || 'The image to crop';
3309
3402
  this.image = image;
3310
3403
  image.onload = this.start.bind(this);
3311
3404
  image.onerror = this.stop.bind(this);
@@ -3317,11 +3410,13 @@
3317
3410
  value: function start() {
3318
3411
  var _this2 = this;
3319
3412
 
3320
- var image = this.isImg ? this.element : this.image;
3413
+ var image = this.image;
3321
3414
  image.onload = null;
3322
3415
  image.onerror = null;
3323
- this.sizing = true;
3324
- var IS_SAFARI = WINDOW.navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(WINDOW.navigator.userAgent);
3416
+ this.sizing = true; // Match all browsers that use WebKit as the layout engine in iOS devices,
3417
+ // such as Safari for iOS, Chrome for iOS, and in-app browsers.
3418
+
3419
+ var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);
3325
3420
 
3326
3421
  var done = function done(naturalWidth, naturalHeight) {
3327
3422
  assign(_this2.imageData, {
@@ -3333,10 +3428,10 @@
3333
3428
  _this2.sized = true;
3334
3429
 
3335
3430
  _this2.build();
3336
- }; // Modern browsers (except Safari)
3431
+ }; // Most modern browsers (excepts iOS WebKit)
3337
3432
 
3338
3433
 
3339
- if (image.naturalWidth && !IS_SAFARI) {
3434
+ if (image.naturalWidth && !isIOSWebKit) {
3340
3435
  done(image.naturalWidth, image.naturalHeight);
3341
3436
  return;
3342
3437
  }
@@ -3348,15 +3443,15 @@
3348
3443
  sizingImage.onload = function () {
3349
3444
  done(sizingImage.width, sizingImage.height);
3350
3445
 
3351
- if (!IS_SAFARI) {
3446
+ if (!isIOSWebKit) {
3352
3447
  body.removeChild(sizingImage);
3353
3448
  }
3354
3449
  };
3355
3450
 
3356
- sizingImage.src = image.src; // iOS Safari will convert the image automatically
3451
+ sizingImage.src = image.src; // iOS WebKit will convert the image automatically
3357
3452
  // with its orientation once append it into DOM (#279)
3358
3453
 
3359
- if (!IS_SAFARI) {
3454
+ if (!isIOSWebKit) {
3360
3455
  sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';
3361
3456
  body.appendChild(sizingImage);
3362
3457
  }
@@ -3518,4 +3613,4 @@
3518
3613
 
3519
3614
  return Cropper;
3520
3615
 
3521
- })));
3616
+ }));
@@ -1,33 +1,32 @@
1
1
  /*!
2
- * jQuery Cropper v1.0.0
3
- * https://github.com/fengyuanchen/jquery-cropper
2
+ * jQuery Cropper v1.0.1
3
+ * https://fengyuanchen.github.io/jquery-cropper
4
4
  *
5
- * Copyright (c) 2018 Chen Fengyuan
5
+ * Copyright 2018-present Chen Fengyuan
6
6
  * Released under the MIT license
7
7
  *
8
- * Date: 2018-04-01T06:20:13.168Z
8
+ * Date: 2019-10-19T08:48:33.062Z
9
9
  */
10
10
 
11
11
  (function (global, factory) {
12
12
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'), require('cropperjs')) :
13
13
  typeof define === 'function' && define.amd ? define(['jquery', 'cropperjs'], factory) :
14
- (factory(global.jQuery,global.Cropper));
15
- }(this, (function ($,Cropper) { 'use strict';
14
+ (global = global || self, factory(global.jQuery, global.Cropper));
15
+ }(this, function ($, Cropper) { 'use strict';
16
16
 
17
17
  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
18
18
  Cropper = Cropper && Cropper.hasOwnProperty('default') ? Cropper['default'] : Cropper;
19
19
 
20
- if ($.fn) {
20
+ if ($ && $.fn && Cropper) {
21
21
  var AnotherCropper = $.fn.cropper;
22
22
  var NAMESPACE = 'cropper';
23
23
 
24
24
  $.fn.cropper = function jQueryCropper(option) {
25
- for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
25
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
26
26
  args[_key - 1] = arguments[_key];
27
27
  }
28
28
 
29
- var result = void 0;
30
-
29
+ var result;
31
30
  this.each(function (i, element) {
32
31
  var $element = $(element);
33
32
  var isDestroy = option === 'destroy';
@@ -39,7 +38,6 @@
39
38
  }
40
39
 
41
40
  var options = $.extend({}, $element.data(), $.isPlainObject(option) && option);
42
-
43
41
  cropper = new Cropper(element, options);
44
42
  $element.data(NAMESPACE, cropper);
45
43
  }
@@ -60,16 +58,16 @@
60
58
  }
61
59
  }
62
60
  });
63
-
64
61
  return result !== undefined ? result : this;
65
62
  };
66
63
 
67
64
  $.fn.cropper.Constructor = Cropper;
68
65
  $.fn.cropper.setDefaults = Cropper.setDefaults;
66
+
69
67
  $.fn.cropper.noConflict = function noConflict() {
70
68
  $.fn.cropper = AnotherCropper;
71
69
  return this;
72
70
  };
73
71
  }
74
72
 
75
- })));
73
+ }));
@@ -1,11 +1,11 @@
1
1
  /*!
2
- * Cropper.js v1.4.3
2
+ * Cropper.js v1.5.6
3
3
  * https://fengyuanchen.github.io/cropperjs
4
4
  *
5
5
  * Copyright 2015-present Chen Fengyuan
6
6
  * Released under the MIT license
7
7
  *
8
- * Date: 2018-10-24T13:07:11.429Z
8
+ * Date: 2019-10-04T04:33:44.164Z
9
9
  */
10
10
 
11
11
  .cropper-container {
@@ -56,14 +56,14 @@
56
56
 
57
57
  .cropper-modal {
58
58
  background-color: #000;
59
- opacity: .5;
59
+ opacity: 0.5;
60
60
  }
61
61
 
62
62
  .cropper-view-box {
63
63
  display: block;
64
64
  height: 100%;
65
- outline-color: rgba(51, 153, 255, 0.75);
66
65
  outline: 1px solid #39f;
66
+ outline-color: rgba(51, 153, 255, 0.75);
67
67
  overflow: hidden;
68
68
  width: 100%;
69
69
  }
@@ -71,7 +71,7 @@
71
71
  .cropper-dashed {
72
72
  border: 0 dashed #eee;
73
73
  display: block;
74
- opacity: .5;
74
+ opacity: 0.5;
75
75
  position: absolute;
76
76
  }
77
77
 
@@ -97,28 +97,28 @@
97
97
  display: block;
98
98
  height: 0;
99
99
  left: 50%;
100
- opacity: .75;
100
+ opacity: 0.75;
101
101
  position: absolute;
102
102
  top: 50%;
103
103
  width: 0;
104
104
  }
105
105
 
106
- .cropper-center:before,
107
- .cropper-center:after {
106
+ .cropper-center::before,
107
+ .cropper-center::after {
108
108
  background-color: #eee;
109
109
  content: ' ';
110
110
  display: block;
111
111
  position: absolute;
112
112
  }
113
113
 
114
- .cropper-center:before {
114
+ .cropper-center::before {
115
115
  height: 1px;
116
116
  left: -3px;
117
117
  top: 0;
118
118
  width: 7px;
119
119
  }
120
120
 
121
- .cropper-center:after {
121
+ .cropper-center::after {
122
122
  height: 7px;
123
123
  left: 0;
124
124
  top: -3px;
@@ -130,7 +130,7 @@
130
130
  .cropper-point {
131
131
  display: block;
132
132
  height: 100%;
133
- opacity: .1;
133
+ opacity: 0.1;
134
134
  position: absolute;
135
135
  width: 100%;
136
136
  }
@@ -176,7 +176,7 @@
176
176
  .cropper-point {
177
177
  background-color: #39f;
178
178
  height: 5px;
179
- opacity: .75;
179
+ opacity: 0.75;
180
180
  width: 5px;
181
181
  }
182
182
 
@@ -252,12 +252,12 @@
252
252
  @media (min-width: 1200px) {
253
253
  .cropper-point.point-se {
254
254
  height: 5px;
255
- opacity: .75;
255
+ opacity: 0.75;
256
256
  width: 5px;
257
257
  }
258
258
  }
259
259
 
260
- .cropper-point.point-se:before {
260
+ .cropper-point.point-se::before {
261
261
  background-color: #39f;
262
262
  bottom: -50%;
263
263
  content: ' ';
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cropper_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - D1ceWard
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-30 00:00:00.000000000 Z
11
+ date: 2020-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jquery-rails
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.16'
33
+ version: '2.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.16'
40
+ version: '2.0'
41
41
  description: Cropper is a simple image cropping library. This gem integrates Cropper
42
42
  with Rails asset pipeline for ease of use.
43
43
  email:
@@ -49,7 +49,6 @@ files:
49
49
  - ".github/ISSUE_TEMPLATE/bug_report.md"
50
50
  - ".github/ISSUE_TEMPLATE/feature_request.md"
51
51
  - ".gitignore"
52
- - ".rubocop.yml"
53
52
  - CODE_OF_CONDUCT.md
54
53
  - CONTRIBUTING.md
55
54
  - Gemfile
@@ -82,8 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
81
  - !ruby/object:Gem::Version
83
82
  version: '0'
84
83
  requirements: []
85
- rubyforge_project:
86
- rubygems_version: 2.7.7
84
+ rubygems_version: 3.1.2
87
85
  signing_key:
88
86
  specification_version: 4
89
87
  summary: Integrate Cropper library with Rails asset pipeline
@@ -1,13 +0,0 @@
1
- AllCops:
2
- DisplayCopNames: true
3
- Exclude:
4
- - '*.gem'
5
-
6
- Style/HashSyntax:
7
- Enabled: true
8
-
9
- Metrics/LineLength:
10
- Max: 100
11
-
12
- Metrics/MethodLength:
13
- Max: 20