SortableJS
SortableJS JavaScript library for reorderable drag-and-drop lists.
SortableJS documentationHow to use
Copy-paste the following <script>
near the end of your pages under JS Implementing Plugins to enable it.
<script src="../assets/vendor/sortablejs/Sortable.min.js"></script>
Copy-paste the following <script>
near the end of your pages under JS Front to enable it.
Copy-paste the init function under JS Plugins Init., before the closing </body>
tag, to enable it.
<script>
(function() {
// INITIALIZATION OF SORTABLE
// =======================================================
HSCore.components.HSSortable.init('.js-sortable')
})();
</script>
Simple list example
<!-- List Group -->
<div class="js-sortable sortablejs-custom list-group"
data-hs-sortable-options='{
"animation": 150,
"group": "listGroup"
}'>
<div class="list-group-item">Item 1</div>
<div class="list-group-item">Item 2</div>
<div class="list-group-item">Item 3</div>
<div class="list-group-item">Item 4</div>
<div class="list-group-item">Item 5</div>
<div class="list-group-item">Item 6</div>
</div>
<!-- End List Group -->
Shared lists
Use "group": "listGroupName"
<div class="row">
<div class="col-md-6">
<!-- List Group -->
<div class="js-sortable sortablejs-custom list-group"
data-hs-sortable-options='{
"animation": 150,
"group": "listGroup"
}'>
<div class="list-group-item">Item 1</div>
<div class="list-group-item">Item 2</div>
<div class="list-group-item">Item 3</div>
<div class="list-group-item">Item 4</div>
<div class="list-group-item">Item 5</div>
<div class="list-group-item">Item 6</div>
</div>
<!-- End List Group -->
</div>
<div class="col-md-6">
<!-- List Group -->
<div class="js-sortable sortablejs-custom list-group"
data-hs-sortable-options='{
"animation": 150,
"group": "listGroup"
}'>
<div class="list-group-item bg-light">Item 1</div>
<div class="list-group-item bg-light">Item 2</div>
<div class="list-group-item bg-light">Item 3</div>
<div class="list-group-item bg-light">Item 4</div>
<div class="list-group-item bg-light">Item 5</div>
<div class="list-group-item bg-light">Item 6</div>
</div>
<!-- End List Group -->
</div>
</div>
<!-- End Row -->
Disable sorting
Try sorting the list on the left. It is not possible because it has it's sort option set to false
. However, you can still drag from the list on the left to the list on the right.
<div class="row">
<div class="col-md-6">
<!-- List Group -->
<div class="js-sortable sortablejs-custom list-group"
data-hs-sortable-options='{
"animation": 150,
"group": {
"name": "listGroup3",
"pull": "clone",
"put": false
}
}'>
<div class="list-group-item">Item 1</div>
<div class="list-group-item">Item 2</div>
<div class="list-group-item">Item 3</div>
<div class="list-group-item">Item 4</div>
<div class="list-group-item">Item 5</div>
<div class="list-group-item">Item 6</div>
</div>
<!-- End List Group -->
</div>
<div class="col-md-6">
<!-- List Group -->
<div class="js-sortable sortablejs-custom list-group"
data-hs-sortable-options='{
"animation": 150,
"group": "listGroup3"
}'>
<div class="list-group-item bg-light">Item 1</div>
<div class="list-group-item bg-light">Item 2</div>
<div class="list-group-item bg-light">Item 3</div>
<div class="list-group-item bg-light">Item 4</div>
<div class="list-group-item bg-light">Item 5</div>
<div class="list-group-item bg-light">Item 6</div>
</div>
<!-- End List Group -->
</div>
</div>
<!-- End Row -->
Handle
<!-- List Group -->
<div class="js-sortable sortablejs-custom list-group"
data-hs-sortable-options='{
"animation": 150,
"handle": ".sortablejs-custom-handle"
}'>
<div class="list-group-item">
<i class="sortablejs-custom-handle bi-grip-horizontal list-group-icon"></i> Item 1
</div>
<div class="list-group-item">
<i class="sortablejs-custom-handle bi-grip-horizontal list-group-icon"></i> Item 2
</div>
<div class="list-group-item">
<i class="sortablejs-custom-handle bi-grip-horizontal list-group-icon"></i> Item 3
</div>
<div class="list-group-item">
<i class="sortablejs-custom-handle bi-grip-horizontal list-group-icon"></i> Item 4
</div>
<div class="list-group-item">
<i class="sortablejs-custom-handle bi-grip-horizontal list-group-icon"></i> Item 5
</div>
<div class="list-group-item">
<i class="sortablejs-custom-handle bi-grip-horizontal list-group-icon"></i> Item 6
</div>
</div>
<!-- End List Group -->
Filter
Try dragging the item with a red background. It cannot be done, because that item is filtered out using the filter
option.
<!-- List Group -->
<div class="js-sortable list-group"
data-hs-sortable-options='{
"animation": 150,
"filter": ".sortablejs-custom-disabled"
}'>
<div class="list-group-item">Item 1</div>
<div class="list-group-item sortablejs-custom-disabled bg-danger text-white">Filtered</div>
<div class="list-group-item">Item 3</div>
<div class="list-group-item">Item 4</div>
<div class="list-group-item">Item 5</div>
<div class="list-group-item">Item 6</div>
</div>
<!-- End List Group -->
Grid
<!-- List Group -->
<div class="js-sortable row"
data-hs-sortable-options='{
"animation": 150,
"ghostClass": "sortablejs-custom-chosen-child"
}'>
<div class="col-md-2 mb-3">
<div class="card">
<div class="card-body text-center">1</div>
</div>
</div>
<div class="col-md-2 mb-3">
<div class="card">
<div class="card-body text-center">2</div>
</div>
</div>
<div class="col-md-2 mb-3">
<div class="card">
<div class="card-body text-center">3</div>
</div>
</div>
<div class="col-md-2 mb-3">
<div class="card">
<div class="card-body text-center">4</div>
</div>
</div>
<div class="col-md-2 mb-3">
<div class="card">
<div class="card-body text-center">5</div>
</div>
</div>
<div class="col-md-2 mb-3">
<div class="card">
<div class="card-body text-center">6</div>
</div>
</div>
<div class="col-md-2 mb-3">
<div class="card">
<div class="card-body text-center">7</div>
</div>
</div>
<div class="col-md-2 mb-3">
<div class="card">
<div class="card-body text-center">8</div>
</div>
</div>
<div class="col-md-2 mb-3">
<div class="card">
<div class="card-body text-center">9</div>
</div>
</div>
<div class="col-md-2 mb-3">
<div class="card">
<div class="card-body text-center">10</div>
</div>
</div>
<div class="col-md-2 mb-3">
<div class="card">
<div class="card-body text-center">11</div>
</div>
</div>
<div class="col-md-2 mb-3">
<div class="card">
<div class="card-body text-center">12</div>
</div>
</div>
</div>
<!-- End List Group -->
Nested
Item 3
<!-- List Group -->
<div class="js-sortable list-group"
data-hs-sortable-options='{
"animation": 150,
"group": "listGroup4",
"fallbackOnBody": true
}'>
<div class="list-group-item">Item 1</div>
<div class="list-group-item">Item 2</div>
<div class="list-group-item">
<h4 class="h5">Item 3</h4>
<div class="js-sortable list-group"
data-hs-sortable-options='{
"animation": 150,
"group": "listGroup5"
}'>
<div class="list-group-item">Item 3.1</div>
<div class="list-group-item">Item 3.2</div>
<div class="list-group-item">Item 3.3</div>
<div class="list-group-item">Item 3.4</div>
</div>
</div>
<div class="list-group-item">Item 4</div>
<div class="list-group-item">Item 5</div>
<div class="list-group-item">Item 6</div>
</div>
<!-- End List Group -->
Multiple Drag
The MultiDrag option allows for multiple items to be dragged at a time. You can click to "select" multiple items, and then drag them as one item.
Use "multiDrag": true
<!-- List Group -->
<div class="js-sortable list-group"
data-hs-sortable-options='{
"animation": 150,
"multiDrag": true,
"selectedClass": "active"
}'>
<div class="list-group-item">Item 1</div>
<div class="list-group-item">Item 2</div>
<div class="list-group-item">Item 3</div>
<div class="list-group-item">Item 4</div>
<div class="list-group-item">Item 5</div>
<div class="list-group-item">Item 6</div>
</div>
<!-- End List Group -->
Swap
The Swap option changes the behaviour of Sortable to allow for items to be swapped with eachother rather than sorted.
Use "swap": true
<!-- List Group -->
<div class="js-sortable list-group"
data-hs-sortable-options='{
"animation": 150,
"swap": true,
"swapClass": "active"
}'>
<div class="list-group-item">Item 1</div>
<div class="list-group-item">Item 2</div>
<div class="list-group-item">Item 3</div>
<div class="list-group-item">Item 4</div>
<div class="list-group-item">Item 5</div>
<div class="list-group-item">Item 6</div>
</div>
<!-- End List Group -->
Links
<!-- List Group -->
<div class="js-sortable list-group">
<a class="js-sortable list-group-item sortablejs-custom-handle" href="#">Sortable with link 1</a>
<a class="js-sortable list-group-item sortablejs-custom-handle" href="#">Sortable with link 2</a>
<a class="js-sortable list-group-item sortablejs-custom-handle" href="#">Sortable with link 3</a>
<a class="js-sortable list-group-item sortablejs-custom-handle" href="#">Sortable with link 4</a>
<a class="js-sortable list-group-item sortablejs-custom-handle" href="#">Sortable with link 5</a>
<a class="js-sortable list-group-item sortablejs-custom-handle" href="#">Sortable with link 6</a>
</div>
<!-- End List Group -->
Data-href with modal example
Modal title
<!-- List Group -->
<div class="js-sortable list-group">
<a class="js-sortable-modal-link list-group-item sortablejs-custom-handle" data-bs-toggle="modal" data-bs-target="#exampleModal" href="javascript:;">Sortable with modal link 1</a>
<a class="js-sortable-modal-link list-group-item sortablejs-custom-handle" data-bs-toggle="modal" data-bs-target="#exampleModal" href="javascript:;">Sortable with modal link 2</a>
<a class="js-sortable-modal-link list-group-item sortablejs-custom-handle" data-bs-toggle="modal" data-bs-target="#exampleModal" href="javascript:;">Sortable with modal link 3</a>
<a class="js-sortable-modal-link list-group-item sortablejs-custom-handle" data-bs-toggle="modal" data-bs-target="#exampleModal" href="javascript:;">Sortable with modal link 4</a>
<a class="js-sortable-modal-link list-group-item sortablejs-custom-handle" data-bs-toggle="modal" data-bs-target="#exampleModal" href="javascript:;">Sortable with modal link 5</a>
<a class="js-sortable-modal-link list-group-item sortablejs-custom-handle" data-bs-toggle="modal" data-bs-target="#exampleModal" href="javascript:;">Sortable with modal link 6</a>
</div>
<!-- End List Group -->
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
<!-- End Modal -->
Methods
Parameters | Description | Default value |
---|---|---|
|
Class when draging. | sortable-chosen-main |