clipboard-rails 1.5.5 → 1.5.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/lib/clipboard/rails/version.rb +1 -1
- data/vendor/assets/javascripts/clipboard.js +309 -263
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 308a3459bc626a1ad5326f4605034167b84bfe61
|
4
|
+
data.tar.gz: bb825185fd39dcd6171b17d1d630935715384807
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e14ba95432452856a4d6fa1e146376c0d144b2c2d36184542ca26f631edae759f717bb64f373a9240e1fb0a550608e79900f7bccd354f39fe0d25c1ce8d2886
|
7
|
+
data.tar.gz: 7d14c6ffcf789bbe59d7b404bcdb7effd4c8cfedcc8b07cae65ebd5923229d383a4a1f818add26f5f584934145564fa5654210c80bd45d1227dc6a1e4ac5ff4b
|
data/LICENSE.txt
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* clipboard.js v1.5.
|
2
|
+
* clipboard.js v1.5.6
|
3
3
|
* https://zenorocha.github.io/clipboard.js
|
4
4
|
*
|
5
5
|
* Licensed MIT © Zeno Rocha
|
@@ -16,48 +16,7 @@ module.exports = function (element, selector, checkYoSelf) {
|
|
16
16
|
}
|
17
17
|
}
|
18
18
|
|
19
|
-
},{"matches-selector":
|
20
|
-
|
21
|
-
/**
|
22
|
-
* Element prototype.
|
23
|
-
*/
|
24
|
-
|
25
|
-
var proto = Element.prototype;
|
26
|
-
|
27
|
-
/**
|
28
|
-
* Vendor function.
|
29
|
-
*/
|
30
|
-
|
31
|
-
var vendor = proto.matchesSelector
|
32
|
-
|| proto.webkitMatchesSelector
|
33
|
-
|| proto.mozMatchesSelector
|
34
|
-
|| proto.msMatchesSelector
|
35
|
-
|| proto.oMatchesSelector;
|
36
|
-
|
37
|
-
/**
|
38
|
-
* Expose `match()`.
|
39
|
-
*/
|
40
|
-
|
41
|
-
module.exports = match;
|
42
|
-
|
43
|
-
/**
|
44
|
-
* Match `el` to `selector`.
|
45
|
-
*
|
46
|
-
* @param {Element} el
|
47
|
-
* @param {String} selector
|
48
|
-
* @return {Boolean}
|
49
|
-
* @api public
|
50
|
-
*/
|
51
|
-
|
52
|
-
function match(el, selector) {
|
53
|
-
if (vendor) return vendor.call(el, selector);
|
54
|
-
var nodes = el.parentNode.querySelectorAll(selector);
|
55
|
-
for (var i = 0; i < nodes.length; ++i) {
|
56
|
-
if (nodes[i] == el) return true;
|
57
|
-
}
|
58
|
-
return false;
|
59
|
-
}
|
60
|
-
},{}],3:[function(require,module,exports){
|
19
|
+
},{"matches-selector":5}],2:[function(require,module,exports){
|
61
20
|
var closest = require('closest');
|
62
21
|
|
63
22
|
/**
|
@@ -67,16 +26,17 @@ var closest = require('closest');
|
|
67
26
|
* @param {String} selector
|
68
27
|
* @param {String} type
|
69
28
|
* @param {Function} callback
|
29
|
+
* @param {Boolean} useCapture
|
70
30
|
* @return {Object}
|
71
31
|
*/
|
72
|
-
function delegate(element, selector, type, callback) {
|
32
|
+
function delegate(element, selector, type, callback, useCapture) {
|
73
33
|
var listenerFn = listener.apply(this, arguments);
|
74
34
|
|
75
|
-
element.addEventListener(type, listenerFn);
|
35
|
+
element.addEventListener(type, listenerFn, useCapture);
|
76
36
|
|
77
37
|
return {
|
78
38
|
destroy: function() {
|
79
|
-
element.removeEventListener(type, listenerFn);
|
39
|
+
element.removeEventListener(type, listenerFn, useCapture);
|
80
40
|
}
|
81
41
|
}
|
82
42
|
}
|
@@ -102,7 +62,7 @@ function listener(element, selector, type, callback) {
|
|
102
62
|
|
103
63
|
module.exports = delegate;
|
104
64
|
|
105
|
-
},{"closest":1}],
|
65
|
+
},{"closest":1}],3:[function(require,module,exports){
|
106
66
|
/**
|
107
67
|
* Check if argument is a HTML element.
|
108
68
|
*
|
@@ -147,13 +107,13 @@ exports.string = function(value) {
|
|
147
107
|
* @param {Object} value
|
148
108
|
* @return {Boolean}
|
149
109
|
*/
|
150
|
-
exports.
|
110
|
+
exports.fn = function(value) {
|
151
111
|
var type = Object.prototype.toString.call(value);
|
152
112
|
|
153
113
|
return type === '[object Function]';
|
154
114
|
};
|
155
115
|
|
156
|
-
},{}],
|
116
|
+
},{}],4:[function(require,module,exports){
|
157
117
|
var is = require('./is');
|
158
118
|
var delegate = require('delegate');
|
159
119
|
|
@@ -175,7 +135,7 @@ function listen(target, type, callback) {
|
|
175
135
|
throw new TypeError('Second argument must be a String');
|
176
136
|
}
|
177
137
|
|
178
|
-
if (!is.
|
138
|
+
if (!is.fn(callback)) {
|
179
139
|
throw new TypeError('Third argument must be a Function');
|
180
140
|
}
|
181
141
|
|
@@ -250,7 +210,48 @@ function listenSelector(selector, type, callback) {
|
|
250
210
|
|
251
211
|
module.exports = listen;
|
252
212
|
|
253
|
-
},{"./is":
|
213
|
+
},{"./is":3,"delegate":2}],5:[function(require,module,exports){
|
214
|
+
|
215
|
+
/**
|
216
|
+
* Element prototype.
|
217
|
+
*/
|
218
|
+
|
219
|
+
var proto = Element.prototype;
|
220
|
+
|
221
|
+
/**
|
222
|
+
* Vendor function.
|
223
|
+
*/
|
224
|
+
|
225
|
+
var vendor = proto.matchesSelector
|
226
|
+
|| proto.webkitMatchesSelector
|
227
|
+
|| proto.mozMatchesSelector
|
228
|
+
|| proto.msMatchesSelector
|
229
|
+
|| proto.oMatchesSelector;
|
230
|
+
|
231
|
+
/**
|
232
|
+
* Expose `match()`.
|
233
|
+
*/
|
234
|
+
|
235
|
+
module.exports = match;
|
236
|
+
|
237
|
+
/**
|
238
|
+
* Match `el` to `selector`.
|
239
|
+
*
|
240
|
+
* @param {Element} el
|
241
|
+
* @param {String} selector
|
242
|
+
* @return {Boolean}
|
243
|
+
* @api public
|
244
|
+
*/
|
245
|
+
|
246
|
+
function match(el, selector) {
|
247
|
+
if (vendor) return vendor.call(el, selector);
|
248
|
+
var nodes = el.parentNode.querySelectorAll(selector);
|
249
|
+
for (var i = 0; i < nodes.length; ++i) {
|
250
|
+
if (nodes[i] == el) return true;
|
251
|
+
}
|
252
|
+
return false;
|
253
|
+
}
|
254
|
+
},{}],6:[function(require,module,exports){
|
254
255
|
function select(element) {
|
255
256
|
var selectedText;
|
256
257
|
|
@@ -351,24 +352,28 @@ module.exports = E;
|
|
351
352
|
},{}],8:[function(require,module,exports){
|
352
353
|
'use strict';
|
353
354
|
|
354
|
-
|
355
|
-
|
356
|
-
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
355
|
+
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
|
357
356
|
|
358
|
-
function
|
357
|
+
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
359
358
|
|
360
|
-
|
359
|
+
Object.defineProperty(exports, "__esModule", {
|
360
|
+
value: true
|
361
|
+
});
|
361
362
|
|
362
363
|
var _select = require('select');
|
363
364
|
|
364
365
|
var _select2 = _interopRequireDefault(_select);
|
365
366
|
|
367
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
368
|
+
|
369
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
370
|
+
|
366
371
|
/**
|
367
372
|
* Inner class which performs selection from either `text` or `target`
|
368
373
|
* properties and then executes copy or cut operations.
|
369
374
|
*/
|
370
375
|
|
371
|
-
var ClipboardAction =
|
376
|
+
var ClipboardAction = function () {
|
372
377
|
/**
|
373
378
|
* @param {Object} options
|
374
379
|
*/
|
@@ -385,152 +390,171 @@ var ClipboardAction = (function () {
|
|
385
390
|
* @param {Object} options
|
386
391
|
*/
|
387
392
|
|
388
|
-
ClipboardAction
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
this.emitter = options.emitter;
|
393
|
-
this.target = options.target;
|
394
|
-
this.text = options.text;
|
395
|
-
this.trigger = options.trigger;
|
393
|
+
_createClass(ClipboardAction, [{
|
394
|
+
key: 'resolveOptions',
|
395
|
+
value: function resolveOptions() {
|
396
|
+
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
|
396
397
|
|
397
|
-
|
398
|
-
|
398
|
+
this.action = options.action;
|
399
|
+
this.emitter = options.emitter;
|
400
|
+
this.target = options.target;
|
401
|
+
this.text = options.text;
|
402
|
+
this.trigger = options.trigger;
|
399
403
|
|
400
|
-
|
401
|
-
* Decides which selection strategy is going to be applied based
|
402
|
-
* on the existence of `text` and `target` properties.
|
403
|
-
*/
|
404
|
-
|
405
|
-
ClipboardAction.prototype.initSelection = function initSelection() {
|
406
|
-
if (this.text && this.target) {
|
407
|
-
throw new Error('Multiple attributes declared, use either "target" or "text"');
|
408
|
-
} else if (this.text) {
|
409
|
-
this.selectFake();
|
410
|
-
} else if (this.target) {
|
411
|
-
this.selectTarget();
|
412
|
-
} else {
|
413
|
-
throw new Error('Missing required attributes, use either "target" or "text"');
|
404
|
+
this.selectedText = '';
|
414
405
|
}
|
415
|
-
};
|
416
406
|
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
407
|
+
/**
|
408
|
+
* Decides which selection strategy is going to be applied based
|
409
|
+
* on the existence of `text` and `target` properties.
|
410
|
+
*/
|
421
411
|
|
422
|
-
|
423
|
-
|
412
|
+
}, {
|
413
|
+
key: 'initSelection',
|
414
|
+
value: function initSelection() {
|
415
|
+
if (this.text && this.target) {
|
416
|
+
throw new Error('Multiple attributes declared, use either "target" or "text"');
|
417
|
+
} else if (this.text) {
|
418
|
+
this.selectFake();
|
419
|
+
} else if (this.target) {
|
420
|
+
this.selectTarget();
|
421
|
+
} else {
|
422
|
+
throw new Error('Missing required attributes, use either "target" or "text"');
|
423
|
+
}
|
424
|
+
}
|
424
425
|
|
425
|
-
|
426
|
+
/**
|
427
|
+
* Creates a fake textarea element, sets its value from `text` property,
|
428
|
+
* and makes a selection on it.
|
429
|
+
*/
|
426
430
|
|
427
|
-
|
428
|
-
|
429
|
-
|
431
|
+
}, {
|
432
|
+
key: 'selectFake',
|
433
|
+
value: function selectFake() {
|
434
|
+
var _this = this;
|
430
435
|
|
431
|
-
|
432
|
-
this.fakeElem.style.position = 'absolute';
|
433
|
-
this.fakeElem.style.left = '-9999px';
|
434
|
-
this.fakeElem.style.top = (window.pageYOffset || document.documentElement.scrollTop) + 'px';
|
435
|
-
this.fakeElem.setAttribute('readonly', '');
|
436
|
-
this.fakeElem.value = this.text;
|
436
|
+
var isRTL = document.documentElement.getAttribute('dir') == 'rtl';
|
437
437
|
|
438
|
-
|
438
|
+
this.removeFake();
|
439
439
|
|
440
|
-
|
441
|
-
|
442
|
-
|
440
|
+
this.fakeHandler = document.body.addEventListener('click', function () {
|
441
|
+
return _this.removeFake();
|
442
|
+
});
|
443
443
|
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
444
|
+
this.fakeElem = document.createElement('textarea');
|
445
|
+
this.fakeElem.style.position = 'absolute';
|
446
|
+
this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';
|
447
|
+
this.fakeElem.style.top = (window.pageYOffset || document.documentElement.scrollTop) + 'px';
|
448
|
+
this.fakeElem.setAttribute('readonly', '');
|
449
|
+
this.fakeElem.value = this.text;
|
448
450
|
|
449
|
-
|
450
|
-
if (this.fakeHandler) {
|
451
|
-
document.body.removeEventListener('click');
|
452
|
-
this.fakeHandler = null;
|
453
|
-
}
|
451
|
+
document.body.appendChild(this.fakeElem);
|
454
452
|
|
455
|
-
|
456
|
-
|
457
|
-
this.fakeElem = null;
|
453
|
+
this.selectedText = (0, _select2.default)(this.fakeElem);
|
454
|
+
this.copyText();
|
458
455
|
}
|
459
|
-
};
|
460
456
|
|
461
|
-
|
462
|
-
|
463
|
-
|
457
|
+
/**
|
458
|
+
* Only removes the fake element after another click event, that way
|
459
|
+
* a user can hit `Ctrl+C` to copy because selection still exists.
|
460
|
+
*/
|
464
461
|
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
462
|
+
}, {
|
463
|
+
key: 'removeFake',
|
464
|
+
value: function removeFake() {
|
465
|
+
if (this.fakeHandler) {
|
466
|
+
document.body.removeEventListener('click');
|
467
|
+
this.fakeHandler = null;
|
468
|
+
}
|
469
469
|
|
470
|
-
|
471
|
-
|
472
|
-
|
470
|
+
if (this.fakeElem) {
|
471
|
+
document.body.removeChild(this.fakeElem);
|
472
|
+
this.fakeElem = null;
|
473
|
+
}
|
474
|
+
}
|
473
475
|
|
474
|
-
|
475
|
-
|
476
|
+
/**
|
477
|
+
* Selects the content from element passed on `target` property.
|
478
|
+
*/
|
476
479
|
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
480
|
+
}, {
|
481
|
+
key: 'selectTarget',
|
482
|
+
value: function selectTarget() {
|
483
|
+
this.selectedText = (0, _select2.default)(this.target);
|
484
|
+
this.copyText();
|
481
485
|
}
|
482
486
|
|
483
|
-
|
484
|
-
|
487
|
+
/**
|
488
|
+
* Executes the copy operation based on the current selection.
|
489
|
+
*/
|
485
490
|
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
491
|
+
}, {
|
492
|
+
key: 'copyText',
|
493
|
+
value: function copyText() {
|
494
|
+
var succeeded = undefined;
|
495
|
+
|
496
|
+
try {
|
497
|
+
succeeded = document.execCommand(this.action);
|
498
|
+
} catch (err) {
|
499
|
+
succeeded = false;
|
500
|
+
}
|
490
501
|
|
491
|
-
|
492
|
-
if (succeeded) {
|
493
|
-
this.emitter.emit('success', {
|
494
|
-
action: this.action,
|
495
|
-
text: this.selectedText,
|
496
|
-
trigger: this.trigger,
|
497
|
-
clearSelection: this.clearSelection.bind(this)
|
498
|
-
});
|
499
|
-
} else {
|
500
|
-
this.emitter.emit('error', {
|
501
|
-
action: this.action,
|
502
|
-
trigger: this.trigger,
|
503
|
-
clearSelection: this.clearSelection.bind(this)
|
504
|
-
});
|
502
|
+
this.handleResult(succeeded);
|
505
503
|
}
|
506
|
-
};
|
507
504
|
|
508
|
-
|
509
|
-
|
510
|
-
|
505
|
+
/**
|
506
|
+
* Fires an event based on the copy operation result.
|
507
|
+
* @param {Boolean} succeeded
|
508
|
+
*/
|
511
509
|
|
512
|
-
|
513
|
-
|
514
|
-
|
510
|
+
}, {
|
511
|
+
key: 'handleResult',
|
512
|
+
value: function handleResult(succeeded) {
|
513
|
+
if (succeeded) {
|
514
|
+
this.emitter.emit('success', {
|
515
|
+
action: this.action,
|
516
|
+
text: this.selectedText,
|
517
|
+
trigger: this.trigger,
|
518
|
+
clearSelection: this.clearSelection.bind(this)
|
519
|
+
});
|
520
|
+
} else {
|
521
|
+
this.emitter.emit('error', {
|
522
|
+
action: this.action,
|
523
|
+
trigger: this.trigger,
|
524
|
+
clearSelection: this.clearSelection.bind(this)
|
525
|
+
});
|
526
|
+
}
|
515
527
|
}
|
516
528
|
|
517
|
-
|
518
|
-
|
529
|
+
/**
|
530
|
+
* Removes current selection and focus from `target` element.
|
531
|
+
*/
|
519
532
|
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
533
|
+
}, {
|
534
|
+
key: 'clearSelection',
|
535
|
+
value: function clearSelection() {
|
536
|
+
if (this.target) {
|
537
|
+
this.target.blur();
|
538
|
+
}
|
524
539
|
|
525
|
-
|
526
|
-
|
527
|
-
*/
|
540
|
+
window.getSelection().removeAllRanges();
|
541
|
+
}
|
528
542
|
|
529
|
-
|
530
|
-
|
531
|
-
|
543
|
+
/**
|
544
|
+
* Sets the `action` to be performed which can be either 'copy' or 'cut'.
|
545
|
+
* @param {String} action
|
546
|
+
*/
|
532
547
|
|
533
|
-
|
548
|
+
}, {
|
549
|
+
key: 'destroy',
|
550
|
+
|
551
|
+
/**
|
552
|
+
* Destroy lifecycle.
|
553
|
+
*/
|
554
|
+
value: function destroy() {
|
555
|
+
this.removeFake();
|
556
|
+
}
|
557
|
+
}, {
|
534
558
|
key: 'action',
|
535
559
|
set: function set() {
|
536
560
|
var action = arguments.length <= 0 || arguments[0] === undefined ? 'copy' : arguments[0];
|
@@ -540,12 +564,13 @@ var ClipboardAction = (function () {
|
|
540
564
|
if (this._action !== 'copy' && this._action !== 'cut') {
|
541
565
|
throw new Error('Invalid "action" value, use either "copy" or "cut"');
|
542
566
|
}
|
543
|
-
}
|
567
|
+
}
|
544
568
|
|
545
569
|
/**
|
546
570
|
* Gets the `action` property.
|
547
571
|
* @return {String}
|
548
572
|
*/
|
573
|
+
,
|
549
574
|
get: function get() {
|
550
575
|
return this._action;
|
551
576
|
}
|
@@ -555,43 +580,42 @@ var ClipboardAction = (function () {
|
|
555
580
|
* that will be have its content copied.
|
556
581
|
* @param {Element} target
|
557
582
|
*/
|
583
|
+
|
558
584
|
}, {
|
559
585
|
key: 'target',
|
560
586
|
set: function set(target) {
|
561
587
|
if (target !== undefined) {
|
562
|
-
if (target && typeof target === 'object' && target.nodeType === 1) {
|
588
|
+
if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {
|
563
589
|
this._target = target;
|
564
590
|
} else {
|
565
591
|
throw new Error('Invalid "target" value, use a valid Element');
|
566
592
|
}
|
567
593
|
}
|
568
|
-
}
|
594
|
+
}
|
569
595
|
|
570
596
|
/**
|
571
597
|
* Gets the `target` property.
|
572
598
|
* @return {String|HTMLElement}
|
573
599
|
*/
|
600
|
+
,
|
574
601
|
get: function get() {
|
575
602
|
return this._target;
|
576
603
|
}
|
577
604
|
}]);
|
578
605
|
|
579
606
|
return ClipboardAction;
|
580
|
-
}
|
607
|
+
}();
|
581
608
|
|
582
|
-
exports
|
583
|
-
module.exports = exports['default'];
|
609
|
+
exports.default = ClipboardAction;
|
584
610
|
|
585
611
|
},{"select":6}],9:[function(require,module,exports){
|
586
612
|
'use strict';
|
587
613
|
|
588
|
-
|
589
|
-
|
590
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
591
|
-
|
592
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
614
|
+
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
593
615
|
|
594
|
-
|
616
|
+
Object.defineProperty(exports, "__esModule", {
|
617
|
+
value: true
|
618
|
+
});
|
595
619
|
|
596
620
|
var _clipboardAction = require('./clipboard-action');
|
597
621
|
|
@@ -605,12 +629,20 @@ var _goodListener = require('good-listener');
|
|
605
629
|
|
606
630
|
var _goodListener2 = _interopRequireDefault(_goodListener);
|
607
631
|
|
632
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
633
|
+
|
634
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
635
|
+
|
636
|
+
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
637
|
+
|
638
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
639
|
+
|
608
640
|
/**
|
609
641
|
* Base class which takes one or more elements, adds event listeners to them,
|
610
642
|
* and instantiates a new `ClipboardAction` on each click.
|
611
643
|
*/
|
612
644
|
|
613
|
-
var Clipboard =
|
645
|
+
var Clipboard = function (_Emitter) {
|
614
646
|
_inherits(Clipboard, _Emitter);
|
615
647
|
|
616
648
|
/**
|
@@ -621,113 +653,130 @@ var Clipboard = (function (_Emitter) {
|
|
621
653
|
function Clipboard(trigger, options) {
|
622
654
|
_classCallCheck(this, Clipboard);
|
623
655
|
|
624
|
-
|
656
|
+
var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Clipboard).call(this));
|
625
657
|
|
626
|
-
|
627
|
-
|
658
|
+
_this.resolveOptions(options);
|
659
|
+
_this.listenClick(trigger);
|
660
|
+
return _this;
|
628
661
|
}
|
629
662
|
|
630
|
-
/**
|
631
|
-
* Helper function to retrieve attribute value.
|
632
|
-
* @param {String} suffix
|
633
|
-
* @param {Element} element
|
634
|
-
*/
|
635
|
-
|
636
663
|
/**
|
637
664
|
* Defines if attributes would be resolved using internal setter functions
|
638
665
|
* or custom functions that were passed in the constructor.
|
639
666
|
* @param {Object} options
|
640
667
|
*/
|
641
668
|
|
642
|
-
Clipboard
|
643
|
-
|
669
|
+
_createClass(Clipboard, [{
|
670
|
+
key: 'resolveOptions',
|
671
|
+
value: function resolveOptions() {
|
672
|
+
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
|
644
673
|
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
674
|
+
this.action = typeof options.action === 'function' ? options.action : this.defaultAction;
|
675
|
+
this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;
|
676
|
+
this.text = typeof options.text === 'function' ? options.text : this.defaultText;
|
677
|
+
}
|
649
678
|
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
679
|
+
/**
|
680
|
+
* Adds a click event listener to the passed trigger.
|
681
|
+
* @param {String|HTMLElement|HTMLCollection|NodeList} trigger
|
682
|
+
*/
|
654
683
|
|
655
|
-
|
656
|
-
|
684
|
+
}, {
|
685
|
+
key: 'listenClick',
|
686
|
+
value: function listenClick(trigger) {
|
687
|
+
var _this2 = this;
|
657
688
|
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
689
|
+
this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {
|
690
|
+
return _this2.onClick(e);
|
691
|
+
});
|
692
|
+
}
|
662
693
|
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
694
|
+
/**
|
695
|
+
* Defines a new `ClipboardAction` on each click event.
|
696
|
+
* @param {Event} e
|
697
|
+
*/
|
667
698
|
|
668
|
-
|
669
|
-
|
699
|
+
}, {
|
700
|
+
key: 'onClick',
|
701
|
+
value: function onClick(e) {
|
702
|
+
var trigger = e.delegateTarget || e.currentTarget;
|
670
703
|
|
671
|
-
|
672
|
-
|
673
|
-
|
704
|
+
if (this.clipboardAction) {
|
705
|
+
this.clipboardAction = null;
|
706
|
+
}
|
674
707
|
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
708
|
+
this.clipboardAction = new _clipboardAction2.default({
|
709
|
+
action: this.action(trigger),
|
710
|
+
target: this.target(trigger),
|
711
|
+
text: this.text(trigger),
|
712
|
+
trigger: trigger,
|
713
|
+
emitter: this
|
714
|
+
});
|
715
|
+
}
|
683
716
|
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
717
|
+
/**
|
718
|
+
* Default `action` lookup function.
|
719
|
+
* @param {Element} trigger
|
720
|
+
*/
|
688
721
|
|
689
|
-
|
690
|
-
|
691
|
-
|
722
|
+
}, {
|
723
|
+
key: 'defaultAction',
|
724
|
+
value: function defaultAction(trigger) {
|
725
|
+
return getAttributeValue('action', trigger);
|
726
|
+
}
|
692
727
|
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
728
|
+
/**
|
729
|
+
* Default `target` lookup function.
|
730
|
+
* @param {Element} trigger
|
731
|
+
*/
|
697
732
|
|
698
|
-
|
699
|
-
|
733
|
+
}, {
|
734
|
+
key: 'defaultTarget',
|
735
|
+
value: function defaultTarget(trigger) {
|
736
|
+
var selector = getAttributeValue('target', trigger);
|
700
737
|
|
701
|
-
|
702
|
-
|
738
|
+
if (selector) {
|
739
|
+
return document.querySelector(selector);
|
740
|
+
}
|
703
741
|
}
|
704
|
-
};
|
705
742
|
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
743
|
+
/**
|
744
|
+
* Default `text` lookup function.
|
745
|
+
* @param {Element} trigger
|
746
|
+
*/
|
710
747
|
|
711
|
-
|
712
|
-
|
713
|
-
|
748
|
+
}, {
|
749
|
+
key: 'defaultText',
|
750
|
+
value: function defaultText(trigger) {
|
751
|
+
return getAttributeValue('text', trigger);
|
752
|
+
}
|
714
753
|
|
715
|
-
|
716
|
-
|
717
|
-
|
754
|
+
/**
|
755
|
+
* Destroy lifecycle.
|
756
|
+
*/
|
718
757
|
|
719
|
-
|
720
|
-
|
758
|
+
}, {
|
759
|
+
key: 'destroy',
|
760
|
+
value: function destroy() {
|
761
|
+
this.listener.destroy();
|
721
762
|
|
722
|
-
|
723
|
-
|
724
|
-
|
763
|
+
if (this.clipboardAction) {
|
764
|
+
this.clipboardAction.destroy();
|
765
|
+
this.clipboardAction = null;
|
766
|
+
}
|
725
767
|
}
|
726
|
-
};
|
768
|
+
}]);
|
727
769
|
|
728
770
|
return Clipboard;
|
729
|
-
}
|
771
|
+
}(_tinyEmitter2.default);
|
730
772
|
|
773
|
+
/**
|
774
|
+
* Helper function to retrieve attribute value.
|
775
|
+
* @param {String} suffix
|
776
|
+
* @param {Element} element
|
777
|
+
*/
|
778
|
+
|
779
|
+
exports.default = Clipboard;
|
731
780
|
function getAttributeValue(suffix, element) {
|
732
781
|
var attribute = 'data-clipboard-' + suffix;
|
733
782
|
|
@@ -738,8 +787,5 @@ function getAttributeValue(suffix, element) {
|
|
738
787
|
return element.getAttribute(attribute);
|
739
788
|
}
|
740
789
|
|
741
|
-
|
742
|
-
module.exports = exports['default'];
|
743
|
-
|
744
|
-
},{"./clipboard-action":8,"good-listener":5,"tiny-emitter":7}]},{},[9])(9)
|
790
|
+
},{"./clipboard-action":8,"good-listener":4,"tiny-emitter":7}]},{},[9])(9)
|
745
791
|
});
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clipboard-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mohammed Sadiq
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -81,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
81
|
version: '0'
|
82
82
|
requirements: []
|
83
83
|
rubyforge_project:
|
84
|
-
rubygems_version: 2.
|
84
|
+
rubygems_version: 2.5.1
|
85
85
|
signing_key:
|
86
86
|
specification_version: 4
|
87
87
|
summary: ''
|