clipboard-rails 1.3.1.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +30 -0
- data/lib/clipboard/rails/version.rb +1 -1
- data/vendor/assets/javascripts/clipboard.js +117 -81
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7adecfec979b0797c27dc425c3de4195849e77e4
|
4
|
+
data.tar.gz: 1d89fbbb306cafb7628f6507c91a8c6dedfc7839
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1cd6b859d27a015fd064e882b56d2e41eae9dbedf1ba393af25b9ddc60c871d6bc447c1ece687b18d84e1614f5c0d2885a8404629e88134afd3d3a87de7eaa71
|
7
|
+
data.tar.gz: 45a8f9a8b016983bc7544dc0bb9bba13250f3b5379b5fa0071e623bd70e9eecc0e46148dc03645adb0199d9510cd57806d10a8dca5989bab4ed855f9ddc2ab6b
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# clipboard-rails
|
2
|
+
[](http://badge.fury.io/rb/clipboard-rails)
|
2
3
|
|
3
4
|
clipboard-rails gem is the integration of clipboard.js javascript library for your Rails 4 application.
|
4
5
|
|
@@ -28,6 +29,35 @@ Now you need to edit your `app/assets/javascripts/application.js` file and add t
|
|
28
29
|
|
29
30
|
## Usage
|
30
31
|
|
32
|
+
Here is the example working code to test with your Rails application.
|
33
|
+
|
34
|
+
Add this sample code to your `app/assets/javascripts/application.js` file
|
35
|
+
|
36
|
+
``` javascript
|
37
|
+
$(document).ready(function(){
|
38
|
+
|
39
|
+
var clip = new Clipboard('.btn');
|
40
|
+
console.log(clip);
|
41
|
+
|
42
|
+
});
|
43
|
+
```
|
44
|
+
|
45
|
+
*Note:* Here i am using `gem 'jquery-turbolinks'` for using the jquery $(document).ready function
|
46
|
+
|
47
|
+
Add this sample code to your template file like `index.html.erb`
|
48
|
+
|
49
|
+
``` html
|
50
|
+
<!-- Target -->
|
51
|
+
<textarea id="bar">Mussum ipsum cacilds...</textarea>
|
52
|
+
|
53
|
+
<!-- Trigger -->
|
54
|
+
<button class="btn" data-clipboard-action="cut" data-clipboard-target="#bar">
|
55
|
+
Cut to clipboard
|
56
|
+
</button>
|
57
|
+
```
|
58
|
+
|
59
|
+
## Full documentation
|
60
|
+
|
31
61
|
Read the clipboard.js documentation here http://zenorocha.github.io/clipboard.js/
|
32
62
|
|
33
63
|
## Development
|
@@ -51,57 +51,57 @@ exports.unbind = function(el, type, fn, capture){
|
|
51
51
|
};
|
52
52
|
|
53
53
|
},{"closest":2,"component-event":4}],2:[function(require,module,exports){
|
54
|
-
var matches = require('matches-selector')
|
55
|
-
|
56
|
-
module.exports = function (element, selector, checkYoSelf) {
|
57
|
-
var parent = checkYoSelf ? element : element.parentNode
|
58
|
-
|
59
|
-
while (parent && parent !== document) {
|
60
|
-
if (matches(parent, selector)) return parent;
|
61
|
-
parent = parent.parentNode
|
62
|
-
}
|
63
|
-
}
|
54
|
+
var matches = require('matches-selector')
|
55
|
+
|
56
|
+
module.exports = function (element, selector, checkYoSelf) {
|
57
|
+
var parent = checkYoSelf ? element : element.parentNode
|
58
|
+
|
59
|
+
while (parent && parent !== document) {
|
60
|
+
if (matches(parent, selector)) return parent;
|
61
|
+
parent = parent.parentNode
|
62
|
+
}
|
63
|
+
}
|
64
64
|
|
65
65
|
},{"matches-selector":3}],3:[function(require,module,exports){
|
66
|
-
|
67
|
-
/**
|
68
|
-
* Element prototype.
|
69
|
-
*/
|
70
|
-
|
71
|
-
var proto = Element.prototype;
|
72
|
-
|
73
|
-
/**
|
74
|
-
* Vendor function.
|
75
|
-
*/
|
76
|
-
|
77
|
-
var vendor = proto.matchesSelector
|
78
|
-
|| proto.webkitMatchesSelector
|
79
|
-
|| proto.mozMatchesSelector
|
80
|
-
|| proto.msMatchesSelector
|
81
|
-
|| proto.oMatchesSelector;
|
82
|
-
|
83
|
-
/**
|
84
|
-
* Expose `match()`.
|
85
|
-
*/
|
86
|
-
|
87
|
-
module.exports = match;
|
88
|
-
|
89
|
-
/**
|
90
|
-
* Match `el` to `selector`.
|
91
|
-
*
|
92
|
-
* @param {Element} el
|
93
|
-
* @param {String} selector
|
94
|
-
* @return {Boolean}
|
95
|
-
* @api public
|
96
|
-
*/
|
97
|
-
|
98
|
-
function match(el, selector) {
|
99
|
-
if (vendor) return vendor.call(el, selector);
|
100
|
-
var nodes = el.parentNode.querySelectorAll(selector);
|
101
|
-
for (var i = 0; i < nodes.length; ++i) {
|
102
|
-
if (nodes[i] == el) return true;
|
103
|
-
}
|
104
|
-
return false;
|
66
|
+
|
67
|
+
/**
|
68
|
+
* Element prototype.
|
69
|
+
*/
|
70
|
+
|
71
|
+
var proto = Element.prototype;
|
72
|
+
|
73
|
+
/**
|
74
|
+
* Vendor function.
|
75
|
+
*/
|
76
|
+
|
77
|
+
var vendor = proto.matchesSelector
|
78
|
+
|| proto.webkitMatchesSelector
|
79
|
+
|| proto.mozMatchesSelector
|
80
|
+
|| proto.msMatchesSelector
|
81
|
+
|| proto.oMatchesSelector;
|
82
|
+
|
83
|
+
/**
|
84
|
+
* Expose `match()`.
|
85
|
+
*/
|
86
|
+
|
87
|
+
module.exports = match;
|
88
|
+
|
89
|
+
/**
|
90
|
+
* Match `el` to `selector`.
|
91
|
+
*
|
92
|
+
* @param {Element} el
|
93
|
+
* @param {String} selector
|
94
|
+
* @return {Boolean}
|
95
|
+
* @api public
|
96
|
+
*/
|
97
|
+
|
98
|
+
function match(el, selector) {
|
99
|
+
if (vendor) return vendor.call(el, selector);
|
100
|
+
var nodes = el.parentNode.querySelectorAll(selector);
|
101
|
+
for (var i = 0; i < nodes.length; ++i) {
|
102
|
+
if (nodes[i] == el) return true;
|
103
|
+
}
|
104
|
+
return false;
|
105
105
|
}
|
106
106
|
},{}],4:[function(require,module,exports){
|
107
107
|
var bind = window.addEventListener ? 'addEventListener' : 'attachEvent',
|
@@ -141,12 +141,12 @@ exports.unbind = function(el, type, fn, capture){
|
|
141
141
|
};
|
142
142
|
},{}],5:[function(require,module,exports){
|
143
143
|
function E () {
|
144
|
-
|
144
|
+
// Keep this empty so it's easier to inherit from
|
145
145
|
// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
|
146
146
|
}
|
147
147
|
|
148
148
|
E.prototype = {
|
149
|
-
|
149
|
+
on: function (name, callback, ctx) {
|
150
150
|
var e = this.e || (this.e = {});
|
151
151
|
|
152
152
|
(e[name] || (e[name] = [])).push({
|
@@ -265,7 +265,7 @@ var ClipboardAction = (function () {
|
|
265
265
|
};
|
266
266
|
|
267
267
|
/**
|
268
|
-
* Creates a fake
|
268
|
+
* Creates a fake textarea element, sets its value from `text` property,
|
269
269
|
* and makes a selection on it.
|
270
270
|
*/
|
271
271
|
|
@@ -278,9 +278,10 @@ var ClipboardAction = (function () {
|
|
278
278
|
return _this.removeFake();
|
279
279
|
});
|
280
280
|
|
281
|
-
this.fakeElem = document.createElement('
|
281
|
+
this.fakeElem = document.createElement('textarea');
|
282
282
|
this.fakeElem.style.position = 'absolute';
|
283
283
|
this.fakeElem.style.left = '-9999px';
|
284
|
+
this.fakeElem.style.top = document.body.scrollTop + 'px';
|
284
285
|
this.fakeElem.setAttribute('readonly', '');
|
285
286
|
this.fakeElem.value = this.text;
|
286
287
|
this.selectedText = this.text;
|
@@ -383,6 +384,14 @@ var ClipboardAction = (function () {
|
|
383
384
|
* @param {String} action
|
384
385
|
*/
|
385
386
|
|
387
|
+
/**
|
388
|
+
* Destroy lifecycle.
|
389
|
+
*/
|
390
|
+
|
391
|
+
ClipboardAction.prototype.destroy = function destroy() {
|
392
|
+
this.removeFake();
|
393
|
+
};
|
394
|
+
|
386
395
|
_createClass(ClipboardAction, [{
|
387
396
|
key: 'action',
|
388
397
|
set: function set() {
|
@@ -458,8 +467,6 @@ var _tinyEmitter = require('tiny-emitter');
|
|
458
467
|
|
459
468
|
var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);
|
460
469
|
|
461
|
-
var prefix = 'data-clipboard-';
|
462
|
-
|
463
470
|
/**
|
464
471
|
* Base class which takes a selector, delegates a click event to it,
|
465
472
|
* and instantiates a new `ClipboardAction` on each click.
|
@@ -482,6 +489,12 @@ var Clipboard = (function (_Emitter) {
|
|
482
489
|
this.delegateClick(selector);
|
483
490
|
}
|
484
491
|
|
492
|
+
/**
|
493
|
+
* Helper function to retrieve attribute value.
|
494
|
+
* @param {String} suffix
|
495
|
+
* @param {Element} element
|
496
|
+
*/
|
497
|
+
|
485
498
|
/**
|
486
499
|
* Defines if attributes would be resolved using internal setter functions
|
487
500
|
* or custom functions that were passed in the constructor.
|
@@ -491,9 +504,9 @@ var Clipboard = (function (_Emitter) {
|
|
491
504
|
Clipboard.prototype.resolveOptions = function resolveOptions() {
|
492
505
|
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
|
493
506
|
|
494
|
-
this.action = typeof options.action === 'function' ? options.action : this.
|
495
|
-
this.target = typeof options.target === 'function' ? options.target : this.
|
496
|
-
this.text = typeof options.text === 'function' ? options.text : this.
|
507
|
+
this.action = typeof options.action === 'function' ? options.action : this.defaultAction;
|
508
|
+
this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;
|
509
|
+
this.text = typeof options.text === 'function' ? options.text : this.defaultText;
|
497
510
|
};
|
498
511
|
|
499
512
|
/**
|
@@ -504,17 +517,26 @@ var Clipboard = (function (_Emitter) {
|
|
504
517
|
Clipboard.prototype.delegateClick = function delegateClick(selector) {
|
505
518
|
var _this = this;
|
506
519
|
|
507
|
-
_delegateEvents2['default'].bind(document.body, selector, 'click', function (e) {
|
508
|
-
return _this.
|
520
|
+
this.binding = _delegateEvents2['default'].bind(document.body, selector, 'click', function (e) {
|
521
|
+
return _this.onClick(e);
|
509
522
|
});
|
510
523
|
};
|
511
524
|
|
525
|
+
/**
|
526
|
+
* Undelegates a click event on body.
|
527
|
+
* @param {String} selector
|
528
|
+
*/
|
529
|
+
|
530
|
+
Clipboard.prototype.undelegateClick = function undelegateClick() {
|
531
|
+
_delegateEvents2['default'].unbind(document.body, 'click', this.binding);
|
532
|
+
};
|
533
|
+
|
512
534
|
/**
|
513
535
|
* Defines a new `ClipboardAction` on each click event.
|
514
536
|
* @param {Event} e
|
515
537
|
*/
|
516
538
|
|
517
|
-
Clipboard.prototype.
|
539
|
+
Clipboard.prototype.onClick = function onClick(e) {
|
518
540
|
if (this.clipboardAction) {
|
519
541
|
this.clipboardAction = null;
|
520
542
|
}
|
@@ -529,48 +551,62 @@ var Clipboard = (function (_Emitter) {
|
|
529
551
|
};
|
530
552
|
|
531
553
|
/**
|
532
|
-
*
|
554
|
+
* Default `action` lookup function.
|
533
555
|
* @param {Element} trigger
|
534
556
|
*/
|
535
557
|
|
536
|
-
Clipboard.prototype.
|
537
|
-
|
538
|
-
return;
|
539
|
-
}
|
540
|
-
|
541
|
-
return trigger.getAttribute(prefix + 'action');
|
558
|
+
Clipboard.prototype.defaultAction = function defaultAction(trigger) {
|
559
|
+
return getAttributeValue('action', trigger);
|
542
560
|
};
|
543
561
|
|
544
562
|
/**
|
545
|
-
*
|
563
|
+
* Default `target` lookup function.
|
546
564
|
* @param {Element} trigger
|
547
565
|
*/
|
548
566
|
|
549
|
-
Clipboard.prototype.
|
550
|
-
|
551
|
-
return;
|
552
|
-
}
|
567
|
+
Clipboard.prototype.defaultTarget = function defaultTarget(trigger) {
|
568
|
+
var selector = getAttributeValue('target', trigger);
|
553
569
|
|
554
|
-
|
555
|
-
|
570
|
+
if (selector) {
|
571
|
+
return document.querySelector(selector);
|
572
|
+
}
|
556
573
|
};
|
557
574
|
|
558
575
|
/**
|
559
|
-
*
|
576
|
+
* Default `text` lookup function.
|
560
577
|
* @param {Element} trigger
|
561
578
|
*/
|
562
579
|
|
563
|
-
Clipboard.prototype.
|
564
|
-
|
565
|
-
|
566
|
-
}
|
580
|
+
Clipboard.prototype.defaultText = function defaultText(trigger) {
|
581
|
+
return getAttributeValue('text', trigger);
|
582
|
+
};
|
567
583
|
|
568
|
-
|
584
|
+
/**
|
585
|
+
* Destroy lifecycle.
|
586
|
+
*/
|
587
|
+
|
588
|
+
Clipboard.prototype.destroy = function destroy() {
|
589
|
+
this.undelegateClick();
|
590
|
+
|
591
|
+
if (this.clipboardAction) {
|
592
|
+
this.clipboardAction.destroy();
|
593
|
+
this.clipboardAction = null;
|
594
|
+
}
|
569
595
|
};
|
570
596
|
|
571
597
|
return Clipboard;
|
572
598
|
})(_tinyEmitter2['default']);
|
573
599
|
|
600
|
+
function getAttributeValue(suffix, element) {
|
601
|
+
var attribute = 'data-clipboard-' + suffix;
|
602
|
+
|
603
|
+
if (!element.hasAttribute(attribute)) {
|
604
|
+
return;
|
605
|
+
}
|
606
|
+
|
607
|
+
return element.getAttribute(attribute);
|
608
|
+
}
|
609
|
+
|
574
610
|
exports['default'] = Clipboard;
|
575
611
|
module.exports = exports['default'];
|
576
612
|
|
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.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mohammed Sadiq
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|