Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
html5sortable
Advanced tools
Lightweight jQuery plugin to create sortable lists and grids using native HTML5 drag and drop API.
Lightweight jQuery plugin to create sortable lists and grids using native HTML5 drag and drop API.
Demo: Check out the examples
bower install html.sortable —save
include html.sortable.x.y.z.js
or the minified version, html.sortable.min.x.y.z.js
.
npm install html.sortable —save
You can find the examples online or test locally.
# To get the local examples to work do the following:
git clone https://github.com/voidberg/html5sortable
cd html5sortable
bower install
1. Node package manager (npm)
You will need npm
, choose any way you like to install npm.
2. Clone and install the project
git clone https://github.com/voidberg/html5sortable
cd html5sortable
npm install && bower install
3. Commit
If you send a pull request make sure it passes the tests & linting. Please do NOT bump the version number.
npm test
Note: At the moment you will get the following warnings, if your PR does not add any other warning, it is considered to have passed:
We are going to fix those linting issues in the near future.
4. Merging PRs and building (only if you have commit rights)
After merging a PR run the following command to build the minified versions and bump the version number.
npm run build
Use sortable
method to create a sortable list:
$('.sortable').sortable();
Use .sortable-placeholder
CSS selectors to change the styles of the placeholder. You may change the class by setting the sortableClass
option in the config object.
$('.sortable').sortable({
sortableClass: 'my-placeholder fade'
});
Use sortstart
event if you want to do something when sorting starts:
$('.sortable').sortable().bind('sortstart', function(e, ui) {
/*
This event is triggered when the user starts sorting and the DOM position has not yet changed.
ui.item contains the current dragged element.
ui.startparent contains the element that the dragged item comes from
*/
});
Use sortupdate
event if you want to do something when the order changes (e.g. storing the new order):
$('.sortable').sortable().bind('sortupdate', function(e, ui) {
/*
This event is triggered when the user stopped sorting and the DOM position has changed.
ui.item contains the current dragged element.
ui.item.index() contains the new index of the dragged element
ui.oldindex contains the old index of the dragged element
ui.startparent contains the element that the dragged item comes from
ui.endparent contains the element that the dragged item was added to
*/
});
Use items
option to specifiy which items inside the element should be sortable:
$('.sortable').sortable({
items: ':not(.disabled)'
});
Use handle
option to restrict drag start to the specified element:
$('.sortable').sortable({
handle: 'h2'
});
Setting forcePlaceholderSize
option to true, forces the placeholder to have a height:
$('.sortable').sortable({
forcePlaceholderSize: true
});
Use connectWith
option to create connected lists:
$('#sortable1, #sortable2').sortable({
connectWith: '.connected'
});
Use placeholder
option to specify the markup of the placeholder:
$('.sortable').sortable({
items: 'tr' ,
placeholder : '<tr><td colspan="7"> </td></tr>'
});
To remove the sortable functionality completely:
$('.sortable').sortable('destroy');
To disable the sortable temporarily:
$('.sortable').sortable('disable');
To enable a disabled sortable:
$('.sortable').sortable('enable');
To reload a sortable:
$('.sortable').sortable('reload');
HELP WANTED: If you know angular and want to help get this package up to date and cleaned up, please contact me (lukasoppermann) or start submitting PRs.
Make your app use the htmlSortable
module. Assign html sortable options to the html-sortable
tag, specify an ng-model and, optionally, specify a callback using html-sortable-callback
.
$scope.sortableOptions = {
placeholder: '<div class="sortable-placeholder col-md-3"><div></div></div>',
forcePlaceholderSize: true
};
$scope.sortableCallback = function (startModel, destModel, start, end) {
// ...
};
<ul html-sortable="sortableOptions" html-sortable-callback="sortableCallback" ng-model='data1'>
<li ng-repeat="itm in data1">
{{itm}}
</li>
</ul>
See the examples for more information.
Original code by Ali Farhadi. This version is mantained by Alexandru Badiu & Lukas Oppermann.
See AUTHORS file.
When sending pull requests make sure to only include changes that directly relate to the fix/feature you are adding and also start a pull request from a freshly cloned copy of the repo to make it easy to merge.
Please always rebase to a single commit with a descriptive name and an explanation of why what was changed.
If you’re creating a pull request, fell free to add yourself to the AUTHORS
file.
Your code should be as self-documenting as possible, but because this is an open source project with multiple contributors please add comments whenever possible.
Every function should have a docblock above stating what the function does and what parameters it is supposed to get.
/*
* remove event handlers from sortable
* @param: {jQuery collection} sortable
*/
You do not need to comment on everything you do, but if you make a decision that could be confusion or something could be potentially seen as an error (e.g. because it is not the default way or not the most obvious way) please comment on why you did this. This prevents people from “fixing” stuff that is not broken and maybe breaking things because of this.
While the code does not pass the linking yet, we are working on it. Please ensure your code does pass our linting.
Take care to maintain the existing coding style. Lint and test your code using npm test
.
Keeping your lines short makes it much more easy to spot errors and for other developers to scan the code.
Keeping to an 80 character limit makes you think more about how to code something and often forces you to refactor and simplify your code.
Lastly, less character per line, mean less potential merge conflicts.
BAD:
var $sortable = $(this), index, placeholder;
Good:
var $sortable = $(this);
var index;
var placeholder;
While a little verbose, declaring one variable per line makes the code much more easy to scan. Additionally this helps when merging PRs.
BAD:
var $item = $(this).attr(‘draggable’, method === ‘enable’);
Good:
var $item = $(this);
$item.attr(‘draggable’, method === ‘enable’);
jQuery makes it easy to chain things together, while this can be a nice feature it makes the code less maintainable, harder to read and harder to understand. Don’t use chaining.
var $sortable = $(this);
The prefixing of variables that store jQuery collection ensures that developers have an easy time differentiating between jQuery collections and other variables.
// This:
if( a === b){
…
} else if ( a === c){
…
}
// Actually means this:
if( a === b){
…
} else {
if ( a === c){
…
}
}
else if does not exists in javascript, so do not use it.
If at all possible, also try to refrain from using else.
if( a === b){
return …
} else {
return …
}
// Could be refactor to
if( a === b){
return …
}
return …
Never use more than 3 parameters, this will keep you from falling into bad habits. If you need complex configuration (which you should try to avoid), use an object.
Do not nest to deeply. This will make the code confusing, hard to read and again, make merging hard. If your code gets to complex, try to refactor parts out into individual functions.
If you want to help us by working on any of the points below, please let me know and I add you and your branch to the list.
Released under the MIT license.
FAQs
VanillaJS sortable lists and grids using native HTML5 drag and drop API.
The npm package html5sortable receives a total of 10,843 weekly downloads. As such, html5sortable popularity was classified as popular.
We found that html5sortable demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.