bullet_train-sortable 1.0.2 → 1.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fff0856e0a46a10b09270bc22d59958017ef78bbb70b02e095cbf5d503480c68
4
- data.tar.gz: 6cb89997aa69c266582a59e5aa91512045e919600a43befd6e931799d85c5347
3
+ metadata.gz: 9e84511987b36e406e093226b47388d30f93efcc481666a42718bd866ca5e13c
4
+ data.tar.gz: 5e92c6e7f2ec330a6c66caa683dcc2e9665da9047a39db7cc7619d969296d070
5
5
  SHA512:
6
- metadata.gz: 8de58432c2ad9f78f670636bb8b370f40470124e929f993704fc0d17adb7ad934eebc65dd70ba80e438d7d257d4091fa67a02d7790c5776668ee66519b7cfc89
7
- data.tar.gz: 7b31ae826cf01892d88dfb5d22cbcd941d164294e82401d2e5b22298fc801d0928583b85ecd7bec96bf6f73754e58012bcb3dfffb7e93d50640bfa0a35459e1a
6
+ metadata.gz: b37f7953f0229ee1bf9ff2349f01137b0a8ccfd1eb1f12efd9e3ffe1834579288368c6677346a8ce98f26a09245e446bf9256f392c8551e04076572a388a3215
7
+ data.tar.gz: a79e8e3f162bcbed90578dc349a0bd83598043f58bb519eaf64cc697a8031f52094f367c621da19a8b3e0a8f5015b266115d6a0ba865031c73b3fe8d1254f558
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2022 Andrew Culver
1
+ Copyright 2022 Bullet Train, Inc.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -22,7 +22,7 @@ $ gem install bullet_train-sortable
22
22
  ```
23
23
 
24
24
  ## Contributing
25
- Contribution directions go here.
25
+ See [`RELEASE.md` in bullet_train-base](https://github.com/bullet-train-co/bullet_train-base/blob/main/RELEASE.md) for instructions on local development and for publishing both the gem and the npm package.
26
26
 
27
27
  ## License
28
28
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1 @@
1
+ import "./reassignable"
@@ -0,0 +1,18 @@
1
+ import { identifierForContextKey } from "@hotwired/stimulus-webpack-helpers"
2
+
3
+ import SortableController from './sortable_controller'
4
+
5
+ export const controllerDefinitions = [
6
+ [SortableController, 'sortable_controller.js']
7
+ ].map(function(d) {
8
+ const key = d[1]
9
+ const controller = d[0]
10
+ return {
11
+ identifier: identifierForContextKey(key),
12
+ controllerConstructor: controller
13
+ }
14
+ })
15
+
16
+ export {
17
+ SortableController
18
+ }
@@ -0,0 +1,80 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+ require("dragula/dist/dragula.min.css")
3
+
4
+ import dragula from 'dragula';
5
+
6
+ export default class extends Controller {
7
+ static values = {
8
+ reorderPath: String,
9
+ saveOnReorder: { type: Boolean, default: true }
10
+ }
11
+
12
+ // will be reissued as native dom events name prepended with 'sortable:' e.g. 'sortable:drag', 'sortable:drop', etc
13
+ static pluginEventsToReissue = [ "drag", "dragend", "drop", "cancel", "remove", "shadow", "over", "out", "cloned" ]
14
+
15
+ connect() {
16
+ if (!this.hasReorderPathValue) { return }
17
+ this.initPluginInstance()
18
+ }
19
+
20
+ disconnect() {
21
+ this.teardownPluginInstance()
22
+ }
23
+
24
+ initPluginInstance() {
25
+ const self = this
26
+ this.plugin = dragula([this.element], {
27
+ moves: function(el, container, handle) {
28
+ var $handles = $(el).find('.reorder-handle')
29
+ if ($handles.length) {
30
+ return !!$(handle).closest('.reorder-handle').length
31
+ } else {
32
+ if (!$(handle).closest('.undraggable').length) {
33
+ return self.element === container
34
+ } else {
35
+ return false
36
+ }
37
+ }
38
+ },
39
+ accepts: function (el, target, source, sibling) {
40
+ if ($(sibling).hasClass('undraggable') && $(sibling).prev().hasClass('undraggable')) {
41
+ return false
42
+ } else {
43
+ return true
44
+ }
45
+ },
46
+ }).on('drop', function (el) {
47
+ // save order here.
48
+ if (self.saveOnReorderValue) {
49
+ self.saveSortOrder()
50
+ }
51
+ }).on('over', function (el, container) {
52
+ // deselect any text fields, or else things go slow!
53
+ $(document.activeElement).blur()
54
+ })
55
+
56
+ this.initReissuePluginEventsAsNativeEvents()
57
+ }
58
+
59
+ initReissuePluginEventsAsNativeEvents() {
60
+ this.constructor.pluginEventsToReissue.forEach((eventName) => {
61
+ this.plugin.on(eventName, (...args) => {
62
+ this.dispatch(eventName, { detail: { plugin: 'dragula', type: eventName, args: args }})
63
+ })
64
+ })
65
+ }
66
+
67
+ teardownPluginInstance() {
68
+ if (this.plugin === undefined) { return }
69
+
70
+ // revert to original markup, remove any event listeners
71
+ this.plugin.destroy()
72
+ }
73
+
74
+ saveSortOrder() {
75
+ var idsInOrder = Array.from(this.element.childNodes).map((el) => { return parseInt(el.dataset?.id) });
76
+
77
+ $.post(this.reorderPathValue, {ids_in_order: idsInOrder})
78
+ }
79
+
80
+ }
@@ -0,0 +1,2 @@
1
+ import "./concerns"
2
+ export * from './controllers'
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module Sortable
3
- VERSION = "1.0.2"
3
+ VERSION = "1.0.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet_train-sortable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-12 00:00:00.000000000 Z
11
+ date: 2022-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -36,8 +36,11 @@ files:
36
36
  - Rakefile
37
37
  - app/assets/config/bullet_train_sortable_manifest.js
38
38
  - app/controllers/concerns/sortable_actions.rb
39
+ - app/javascript/concerns/index.js
39
40
  - app/javascript/concerns/reassignable.js
40
- - app/javascript/concerns/sortable.js
41
+ - app/javascript/controllers/index.js
42
+ - app/javascript/controllers/sortable_controller.js
43
+ - app/javascript/index.js
41
44
  - app/models/concerns/sortable.rb
42
45
  - config/routes.rb
43
46
  - lib/bullet_train/sortable.rb
@@ -65,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
68
  - !ruby/object:Gem::Version
66
69
  version: '0'
67
70
  requirements: []
68
- rubygems_version: 3.2.22
71
+ rubygems_version: 3.3.7
69
72
  signing_key:
70
73
  specification_version: 4
71
74
  summary: Bullet Train Sortable
@@ -1,70 +0,0 @@
1
- require("dragula/dist/dragula.min.css")
2
-
3
- import dragula from 'dragula';
4
-
5
- function saveSortOrder($container) {
6
- var idsInOrder = $container.find('> *').map(function(index,element) { return parseInt($(element).attr('data-id')); }).toArray();
7
- $.post($container.attr('data-reorder'), {ids_in_order: idsInOrder}, function() {
8
- if ($container.closest('.opened-modally').length) {
9
- refreshModalBase();
10
- }
11
- });
12
- }
13
-
14
- function enableSortable($scope) {
15
- setTimeout(function() {
16
- var selector = '[data-reorder]';
17
- var $reorderable = $scope.find(selector).addBack(selector);
18
- console.log("enabling sort on array of " + $reorderable.length);
19
-
20
- $reorderable.each(function (index, container) {
21
-
22
- var $container = $(container);
23
-
24
- // enable drag-and-drop reordering.
25
- var dragulaObj = dragula([container], {
26
- moves: function(el, container, handle) {
27
- var $handles = $(el).find('.reorder-handle')
28
- if ($handles.length) {
29
- return !!$(handle).closest('.reorder-handle').length
30
- } else {
31
- if (!$(handle).closest('.undraggable').length) {
32
- return $(handle).closest('[data-reorder]')[0] == container;
33
- } else {
34
- return false;
35
- }
36
- }
37
- },
38
- accepts: function (el, target, source, sibling) {
39
- if ($(sibling).hasClass('undraggable') && $(sibling).prev().hasClass('undraggable')) {
40
- return false;
41
- } else {
42
- return true;
43
- }
44
- },
45
- }).on('drop', function (el) {
46
-
47
- // save order here.
48
- saveSortOrder($container);
49
-
50
- }).on('over', function (el, container) {
51
-
52
- // deselect any text fields, or else things go slow!
53
- $(document.activeElement).blur();
54
-
55
- });
56
-
57
- });
58
- }, 500);
59
- }
60
-
61
- $(document).on('turbo:load', function() {
62
- console.log("🍩 Sortable: Enabling on <body> after a Turbo load.")
63
- enableSortable($('body'));
64
- })
65
-
66
- $(document).on('sprinkles:update', function(event) {
67
- console.log("🍩 Sortable: Enabling on the following element after a Sprinkles content update:")
68
- console.log(event.target);
69
- enableSortable($(event.target));
70
- })