bullet_train-sortable 1.0.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
- })