bullet_train-sortable 1.0.2 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fff0856e0a46a10b09270bc22d59958017ef78bbb70b02e095cbf5d503480c68
4
- data.tar.gz: 6cb89997aa69c266582a59e5aa91512045e919600a43befd6e931799d85c5347
3
+ metadata.gz: 2ee6c7f7c14019d295c69144738fa9ec71f66d6f496b53bed2d531c60bd22ae6
4
+ data.tar.gz: 81f82e2c4b041eb531cd34898c929085ebedb2e09b6498d3078f2f2fc5fb1442
5
5
  SHA512:
6
- metadata.gz: 8de58432c2ad9f78f670636bb8b370f40470124e929f993704fc0d17adb7ad934eebc65dd70ba80e438d7d257d4091fa67a02d7790c5776668ee66519b7cfc89
7
- data.tar.gz: 7b31ae826cf01892d88dfb5d22cbcd941d164294e82401d2e5b22298fc801d0928583b85ecd7bec96bf6f73754e58012bcb3dfffb7e93d50640bfa0a35459e1a
6
+ metadata.gz: 83ff615e5473b5a572679c00612a829f69541bef34811048b33a68dc31c8887f35352bb699bec0d07b26db837d499729029af41323017f0b71ea0df2f4b937be
7
+ data.tar.gz: 8e703c9fc8be22fcb2ec469d293af6877559b77308c01637ed331df2702859aab2199a1fb4b52cd9cc7977eec74c84dabbf8ec7d7d35e777120cb1ea838336f8
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,81 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+ import { post } from '@rails/request.js'
3
+ require("dragula/dist/dragula.min.css")
4
+
5
+ import dragula from 'dragula';
6
+
7
+ export default class extends Controller {
8
+ static values = {
9
+ reorderPath: String,
10
+ saveOnReorder: { type: Boolean, default: true }
11
+ }
12
+
13
+ // will be reissued as native dom events name prepended with 'sortable:' e.g. 'sortable:drag', 'sortable:drop', etc
14
+ static pluginEventsToReissue = [ "drag", "dragend", "drop", "cancel", "remove", "shadow", "over", "out", "cloned" ]
15
+
16
+ connect() {
17
+ if (!this.hasReorderPathValue) { return }
18
+ this.initPluginInstance()
19
+ }
20
+
21
+ disconnect() {
22
+ this.teardownPluginInstance()
23
+ }
24
+
25
+ initPluginInstance() {
26
+ const self = this
27
+ this.plugin = dragula([this.element], {
28
+ moves: function(el, container, handle) {
29
+ var $handles = $(el).find('.reorder-handle')
30
+ if ($handles.length) {
31
+ return !!$(handle).closest('.reorder-handle').length
32
+ } else {
33
+ if (!$(handle).closest('.undraggable').length) {
34
+ return self.element === container
35
+ } else {
36
+ return false
37
+ }
38
+ }
39
+ },
40
+ accepts: function (el, target, source, sibling) {
41
+ if ($(sibling).hasClass('undraggable') && $(sibling).prev().hasClass('undraggable')) {
42
+ return false
43
+ } else {
44
+ return true
45
+ }
46
+ },
47
+ }).on('drop', function (el) {
48
+ // save order here.
49
+ if (self.saveOnReorderValue) {
50
+ self.saveSortOrder()
51
+ }
52
+ }).on('over', function (el, container) {
53
+ // deselect any text fields, or else things go slow!
54
+ $(document.activeElement).blur()
55
+ })
56
+
57
+ this.initReissuePluginEventsAsNativeEvents()
58
+ }
59
+
60
+ initReissuePluginEventsAsNativeEvents() {
61
+ this.constructor.pluginEventsToReissue.forEach((eventName) => {
62
+ this.plugin.on(eventName, (...args) => {
63
+ this.dispatch(eventName, { detail: { plugin: 'dragula', type: eventName, args: args }})
64
+ })
65
+ })
66
+ }
67
+
68
+ teardownPluginInstance() {
69
+ if (this.plugin === undefined) { return }
70
+
71
+ // revert to original markup, remove any event listeners
72
+ this.plugin.destroy()
73
+ }
74
+
75
+ saveSortOrder() {
76
+ var idsInOrder = Array.from(this.element.childNodes).map((el) => { return parseInt(el.dataset?.id) });
77
+
78
+ post(this.reorderPathValue, { body: JSON.stringify({ids_in_order: idsInOrder}) })
79
+ }
80
+
81
+ }
@@ -0,0 +1,2 @@
1
+ import "./concerns"
2
+ export * from './controllers'
@@ -2,7 +2,7 @@ module BulletTrain
2
2
  module Sortable
3
3
  class Engine < ::Rails::Engine
4
4
  initializer "bullet_train.sortable.register_routing_concerns" do |app|
5
- BulletTrain.routing_concerns << Proc.new do
5
+ BulletTrain.routing_concerns << proc do
6
6
  concern :sortable do
7
7
  collection do
8
8
  post :reorder
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module Sortable
3
- VERSION = "1.0.2"
3
+ VERSION = "1.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,29 +1,43 @@
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.2.0
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-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: standard
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rails
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: 7.0.0
33
+ version: 6.0.0
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: 7.0.0
40
+ version: 6.0.0
27
41
  description: Bullet Train Sortable
28
42
  email:
29
43
  - andrew.culver@gmail.com
@@ -36,8 +50,11 @@ files:
36
50
  - Rakefile
37
51
  - app/assets/config/bullet_train_sortable_manifest.js
38
52
  - app/controllers/concerns/sortable_actions.rb
53
+ - app/javascript/concerns/index.js
39
54
  - app/javascript/concerns/reassignable.js
40
- - app/javascript/concerns/sortable.js
55
+ - app/javascript/controllers/index.js
56
+ - app/javascript/controllers/sortable_controller.js
57
+ - app/javascript/index.js
41
58
  - app/models/concerns/sortable.rb
42
59
  - config/routes.rb
43
60
  - lib/bullet_train/sortable.rb
@@ -65,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
82
  - !ruby/object:Gem::Version
66
83
  version: '0'
67
84
  requirements: []
68
- rubygems_version: 3.2.22
85
+ rubygems_version: 3.3.7
69
86
  signing_key:
70
87
  specification_version: 4
71
88
  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
- })