draggable-rails 0.1.1 → 1.0.0.pre.beta

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.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +19 -10
  3. data/lib/draggable/rails/version.rb +1 -1
  4. data/vendor/assets/javascripts/draggable.js +5602 -383
  5. metadata +4 -28
  6. data/vendor/assets/javascripts/behaviour/collidable.js +0 -99
  7. data/vendor/assets/javascripts/behaviour/snappable.js +0 -107
  8. data/vendor/assets/javascripts/core/accessibility.js +0 -58
  9. data/vendor/assets/javascripts/core/mirror.js +0 -129
  10. data/vendor/assets/javascripts/droppable.js +0 -168
  11. data/vendor/assets/javascripts/events/abstract-event.js +0 -45
  12. data/vendor/assets/javascripts/events/collidable-event.js +0 -25
  13. data/vendor/assets/javascripts/events/drag-event.js +0 -91
  14. data/vendor/assets/javascripts/events/draggable-event.js +0 -17
  15. data/vendor/assets/javascripts/events/droppable-event.js +0 -21
  16. data/vendor/assets/javascripts/events/mirror-event.js +0 -43
  17. data/vendor/assets/javascripts/events/sensor-event.js +0 -47
  18. data/vendor/assets/javascripts/events/snappable-event.js +0 -15
  19. data/vendor/assets/javascripts/events/sortable-event.js +0 -35
  20. data/vendor/assets/javascripts/events/swappable-event.js +0 -23
  21. data/vendor/assets/javascripts/index.js +0 -18
  22. data/vendor/assets/javascripts/sensors/drag-sensor.js +0 -158
  23. data/vendor/assets/javascripts/sensors/force-touch-sensor.js +0 -166
  24. data/vendor/assets/javascripts/sensors/mouse-sensor.js +0 -110
  25. data/vendor/assets/javascripts/sensors/sensor.js +0 -23
  26. data/vendor/assets/javascripts/sensors/touch-sensor.js +0 -145
  27. data/vendor/assets/javascripts/sortable.js +0 -161
  28. data/vendor/assets/javascripts/swappable.js +0 -104
  29. data/vendor/assets/javascripts/utils.js +0 -52
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: draggable-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0.pre.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mohammed Sadiq
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-29 00:00:00.000000000 Z
11
+ date: 2017-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,31 +73,7 @@ files:
73
73
  - lib/draggable/rails.rb
74
74
  - lib/draggable/rails/version.rb
75
75
  - vendor/assets/javascripts/.keep
76
- - vendor/assets/javascripts/behaviour/collidable.js
77
- - vendor/assets/javascripts/behaviour/snappable.js
78
- - vendor/assets/javascripts/core/accessibility.js
79
- - vendor/assets/javascripts/core/mirror.js
80
76
  - vendor/assets/javascripts/draggable.js
81
- - vendor/assets/javascripts/droppable.js
82
- - vendor/assets/javascripts/events/abstract-event.js
83
- - vendor/assets/javascripts/events/collidable-event.js
84
- - vendor/assets/javascripts/events/drag-event.js
85
- - vendor/assets/javascripts/events/draggable-event.js
86
- - vendor/assets/javascripts/events/droppable-event.js
87
- - vendor/assets/javascripts/events/mirror-event.js
88
- - vendor/assets/javascripts/events/sensor-event.js
89
- - vendor/assets/javascripts/events/snappable-event.js
90
- - vendor/assets/javascripts/events/sortable-event.js
91
- - vendor/assets/javascripts/events/swappable-event.js
92
- - vendor/assets/javascripts/index.js
93
- - vendor/assets/javascripts/sensors/drag-sensor.js
94
- - vendor/assets/javascripts/sensors/force-touch-sensor.js
95
- - vendor/assets/javascripts/sensors/mouse-sensor.js
96
- - vendor/assets/javascripts/sensors/sensor.js
97
- - vendor/assets/javascripts/sensors/touch-sensor.js
98
- - vendor/assets/javascripts/sortable.js
99
- - vendor/assets/javascripts/swappable.js
100
- - vendor/assets/javascripts/utils.js
101
77
  - vendor/assets/stylesheets/.keep
102
78
  homepage: https://github.com/sadiqmmm/draggable-rails
103
79
  licenses:
@@ -114,9 +90,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
114
90
  version: '0'
115
91
  required_rubygems_version: !ruby/object:Gem::Requirement
116
92
  requirements:
117
- - - ">="
93
+ - - ">"
118
94
  - !ruby/object:Gem::Version
119
- version: '0'
95
+ version: 1.3.1
120
96
  requirements: []
121
97
  rubyforge_project:
122
98
  rubygems_version: 2.6.13
@@ -1,99 +0,0 @@
1
- import {closest} from './../utils';
2
-
3
- import {
4
- CollidableInEvent,
5
- CollidableOutEvent,
6
- } from './../events/collidable-event';
7
-
8
- export default class Collidable {
9
- constructor(draggable) {
10
- this.draggable = draggable;
11
-
12
- this._onDragMove = this._onDragMove.bind(this);
13
- this._onDragStop = this._onDragStop.bind(this);
14
- this._onRequestAnimationFrame = this._onRequestAnimationFrame.bind(this);
15
- }
16
-
17
- attach() {
18
- this.draggable.on('drag:move', this._onDragMove);
19
- this.draggable.on('drag:stop', this._onDragStop);
20
- }
21
-
22
- detach() {
23
- this.draggable.off('drag:move', this._onDragMove);
24
- this.draggable.off('drag:stop', this._onDragStop);
25
- }
26
-
27
- _onDragMove(event) {
28
- const target = event.sensorEvent.target;
29
-
30
- this.currentAnimationFrame = requestAnimationFrame(this._onRequestAnimationFrame(target));
31
-
32
- if (this.currentlyCollidingElement) {
33
- event.cancel();
34
- }
35
-
36
- const collidableInEvent = new CollidableInEvent({
37
- dragEvent: event,
38
- collidingElement: this.currentlyCollidingElement,
39
- });
40
-
41
- const collidableOutEvent = new CollidableOutEvent({
42
- dragEvent: event,
43
- collidingElement: this.lastCollidingElement,
44
- });
45
-
46
- const enteringCollidable = Boolean(this.currentlyCollidingElement && this.lastCollidingElement !== this.currentlyCollidingElement);
47
- const leavingCollidable = Boolean(!this.currentlyCollidingElement && this.lastCollidingElement);
48
-
49
- if (enteringCollidable) {
50
- if (this.lastCollidingElement) {
51
- this.draggable.triggerEvent(collidableOutEvent);
52
- }
53
-
54
- this.draggable.triggerEvent(collidableInEvent);
55
- } else if (leavingCollidable) {
56
- this.draggable.triggerEvent(collidableOutEvent);
57
- }
58
-
59
- this.lastCollidingElement = this.currentlyCollidingElement;
60
- }
61
-
62
- _onDragStop(event) {
63
- const lastCollidingElement = this.currentlyCollidingElement || this.lastCollidingElement;
64
- const collidableOutEvent = new CollidableOutEvent({
65
- dragEvent: event,
66
- collidingElement: lastCollidingElement,
67
- });
68
-
69
- if (lastCollidingElement) {
70
- this.draggable.triggerEvent(collidableOutEvent);
71
- }
72
-
73
- this.lastCollidingElement = null;
74
- this.currentlyCollidingElement = null;
75
- }
76
-
77
- _onRequestAnimationFrame(target) {
78
- return () => {
79
- const collidables = this._getCollidables();
80
- this.currentlyCollidingElement = closest(target, (element) => collidables.includes(element));
81
- };
82
- }
83
-
84
- _getCollidables() {
85
- const collidables = this.draggable.options.collidables;
86
-
87
- if (typeof collidables === 'string') {
88
- return Array.prototype.slice.call(document.querySelectorAll(collidables));
89
- } else if (collidables instanceof NodeList || collidables instanceof Array) {
90
- return Array.prototype.slice.call(collidables);
91
- } else if (collidables instanceof HTMLElement) {
92
- return [collidables];
93
- } else if (typeof collidables === 'function') {
94
- return collidables();
95
- } else {
96
- return [];
97
- }
98
- }
99
- }
@@ -1,107 +0,0 @@
1
- import {
2
- SnapInEvent,
3
- SnapOutEvent,
4
- } from './../events/snappable-event';
5
-
6
- export default class Snappable {
7
- constructor(draggable) {
8
- this.draggable = draggable;
9
-
10
- this._onDragStart = this._onDragStart.bind(this);
11
- this._onDragStop = this._onDragStop.bind(this);
12
- this._onDragOver = this._onDragOver.bind(this);
13
- this._onDragOut = this._onDragOut.bind(this);
14
- }
15
-
16
- attach() {
17
- this.draggable
18
- .on('drag:start', this._onDragStart)
19
- .on('drag:stop', this._onDragStop)
20
- .on('drag:over', this._onDragOver)
21
- .on('drag:out', this._onDragOut)
22
- .on('droppable:over', this._onDragOver)
23
- .on('droppable:out', this._onDragOut);
24
- }
25
-
26
- detach() {
27
- this.draggable
28
- .off('drag:start', this._onDragStart)
29
- .off('drag:stop', this._onDragStop)
30
- .off('drag:over', this._onDragOver)
31
- .off('drag:out', this._onDragOut)
32
- .off('droppable:over', this._onDragOver)
33
- .off('droppable:out', this._onDragOut);
34
- }
35
-
36
- _onDragStart(event) {
37
- if (event.canceled()) {
38
- return;
39
- }
40
-
41
- this.firstSource = event.source;
42
- }
43
-
44
- _onDragStop() {
45
- this.firstSource = null;
46
- }
47
-
48
- _onDragOver(event) {
49
- if (event.canceled()) {
50
- return;
51
- }
52
-
53
- const source = event.source || event.dragEvent.source;
54
- const mirror = event.mirror || event.dragEvent.mirror;
55
-
56
- if (source === this.firstSource) {
57
- this.firstSource = null;
58
- return;
59
- }
60
-
61
- const snapInEvent = new SnapInEvent({
62
- dragEvent: event,
63
- });
64
-
65
- this.draggable.triggerEvent(snapInEvent);
66
-
67
- if (snapInEvent.canceled()) {
68
- return;
69
- }
70
-
71
- if (mirror) {
72
- mirror.style.display = 'none';
73
- }
74
-
75
- source.classList.remove(this.draggable.getClassNameFor('source:dragging'));
76
- source.classList.add(this.draggable.getClassNameFor('source:placed'));
77
-
78
- setTimeout(() => {
79
- source.classList.remove(this.draggable.getClassNameFor('source:placed'));
80
- }, this.draggable.options.placedTimeout);
81
- }
82
-
83
- _onDragOut(event) {
84
- if (event.canceled()) {
85
- return;
86
- }
87
-
88
- const mirror = event.mirror || event.dragEvent.mirror;
89
- const source = event.source || event.dragEvent.source;
90
-
91
- const snapOutEvent = new SnapOutEvent({
92
- dragEvent: event,
93
- });
94
-
95
- this.draggable.triggerEvent(snapOutEvent);
96
-
97
- if (snapOutEvent.canceled()) {
98
- return;
99
- }
100
-
101
- if (mirror) {
102
- mirror.style.display = '';
103
- }
104
-
105
- source.classList.add(this.draggable.getClassNameFor('source:dragging'));
106
- }
107
- }
@@ -1,58 +0,0 @@
1
- const ARIA_GRABBED = 'aria-grabbed';
2
- const ARIA_DROPEFFECT = 'aria-dropeffect';
3
- const TABINDEX = 'tabindex';
4
-
5
- export default class Accessibility {
6
- constructor(draggable) {
7
- this.draggable = draggable;
8
-
9
- this._onInit = this._onInit.bind(this);
10
- this._onDestroy = this._onDestroy.bind(this);
11
- }
12
-
13
- attach() {
14
- this.draggable
15
- .on('init', this._onInit)
16
- .on('destroy', this._onDestroy)
17
- .on('drag:start', _onDragStart)
18
- .on('drag:stop', _onDragStop);
19
- }
20
-
21
- detach() {
22
- this.draggable
23
- .off('init', this._onInit)
24
- .off('destroy', this._onDestroy)
25
- .off('drag:start', _onDragStart)
26
- .off('drag:stop', _onDragStop);
27
- }
28
-
29
- _onInit({containers}) {
30
- for (const container of containers) {
31
- container.setAttribute(ARIA_DROPEFFECT, this.draggable.options.type);
32
-
33
- for (const element of container.querySelectorAll(this.draggable.options.draggable)) {
34
- element.setAttribute(TABINDEX, 0);
35
- element.setAttribute(ARIA_GRABBED, false);
36
- }
37
- }
38
- }
39
-
40
- _onDestroy({containers}) {
41
- for (const container of containers) {
42
- container.removeAttribute(ARIA_DROPEFFECT);
43
-
44
- for (const element of container.querySelectorAll(this.draggable.options.draggable)) {
45
- element.removeAttribute(TABINDEX, 0);
46
- element.removeAttribute(ARIA_GRABBED, false);
47
- }
48
- }
49
- }
50
- }
51
-
52
- function _onDragStart({source}) {
53
- source.setAttribute(ARIA_GRABBED, true);
54
- }
55
-
56
- function _onDragStop({source}) {
57
- source.setAttribute(ARIA_GRABBED, false);
58
- }
@@ -1,129 +0,0 @@
1
- export default class Mirror {
2
- constructor(draggable) {
3
- this.draggable = draggable;
4
-
5
- this._onMirrorCreated = this._onMirrorCreated.bind(this);
6
- this._onMirrorMove = this._onMirrorMove.bind(this);
7
- }
8
-
9
- attach() {
10
- this.draggable
11
- .on('mirror:created', this._onMirrorCreated)
12
- .on('mirror:created', onMirrorCreated)
13
- .on('mirror:move', this._onMirrorMove);
14
- }
15
-
16
- detach() {
17
- this.draggable
18
- .off('mirror:created', this._onMirrorCreated)
19
- .off('mirror:created', onMirrorCreated)
20
- .off('mirror:move', this._onMirrorMove);
21
- }
22
-
23
- _onMirrorCreated({mirror, source, sensorEvent}) {
24
- const mirrorClass = this.draggable.getClassNameFor('mirror');
25
-
26
- const setState = (data) => {
27
- this.mirrorOffset = data.mirrorOffset;
28
- return data;
29
- };
30
-
31
- Promise.resolve({mirror, source, sensorEvent, mirrorClass})
32
- .then(computeMirrorDimensions)
33
- .then(calculateMirrorOffset)
34
- .then(addMirrorClasses)
35
- .then(positionMirror())
36
- .then(removeMirrorID)
37
- .then(setState)
38
- .catch();
39
- }
40
-
41
- _onMirrorMove({mirror, sensorEvent}) {
42
- Promise.resolve({mirror, sensorEvent, mirrorOffset: this.mirrorOffset})
43
- .then(positionMirror({raf: true}))
44
- .catch();
45
- }
46
- }
47
-
48
- function onMirrorCreated({mirror, source}) {
49
- Promise.resolve({mirror, source})
50
- .then(resetMirror)
51
- .catch();
52
- }
53
-
54
- function resetMirror(data) {
55
- return withPromise((resolve) => {
56
- const {mirror, source} = data;
57
-
58
- mirror.style.position = 'fixed';
59
- mirror.style.pointerEvents = 'none';
60
- mirror.style.top = 0;
61
- mirror.style.left = 0;
62
- mirror.style.width = `${source.offsetWidth}px`;
63
- mirror.style.height = `${source.offsetHeight}px`;
64
-
65
- resolve(data);
66
- });
67
- }
68
-
69
- function computeMirrorDimensions(data) {
70
- return withPromise((resolve) => {
71
- const {source} = data;
72
- const sourceRect = source.getBoundingClientRect();
73
- resolve({...data, sourceRect});
74
- });
75
- }
76
-
77
- function calculateMirrorOffset(data) {
78
- return withPromise((resolve) => {
79
- const {sensorEvent, sourceRect} = data;
80
- const mirrorOffset = {top: sensorEvent.clientY - sourceRect.top, left: sensorEvent.clientX - sourceRect.left};
81
- resolve({...data, mirrorOffset});
82
- });
83
- }
84
-
85
- function addMirrorClasses(data) {
86
- return withPromise((resolve) => {
87
- const {mirror, mirrorClass} = data;
88
- mirror.classList.add(mirrorClass);
89
- resolve(data);
90
- });
91
- }
92
-
93
- function removeMirrorID(data) {
94
- return withPromise((resolve) => {
95
- const {mirror} = data;
96
- mirror.removeAttribute('id');
97
- delete mirror.id;
98
- resolve(data);
99
- });
100
- }
101
-
102
- function positionMirror({withFrame = false} = {}) {
103
- return (data) => {
104
- return withPromise((resolve) => {
105
- const {mirror, sensorEvent, mirrorOffset} = data;
106
-
107
- if (mirrorOffset) {
108
- const x = sensorEvent.clientX - mirrorOffset.left;
109
- const y = sensorEvent.clientY - mirrorOffset.top;
110
-
111
- mirror.style.transform = `translate3d(${x}px, ${y}px, 0)`;
112
- }
113
-
114
- resolve(data);
115
- }, {frame: withFrame});
116
- };
117
- }
118
-
119
- function withPromise(callback, {raf = false} = {}) {
120
- return new Promise((resolve, reject) => {
121
- if (raf) {
122
- requestAnimationFrame(() => {
123
- callback(resolve, reject);
124
- });
125
- } else {
126
- callback(resolve, reject);
127
- }
128
- });
129
- }