From e87d68d0e2a786964991ba0103a80f8083eb65f5 Mon Sep 17 00:00:00 2001 From: Lebedev Konstantin Date: Tue, 5 Jul 2016 16:23:56 +0300 Subject: [PATCH] [MOVED] https://github.com/SortableJS/angular-legacy-sortablejs --- README.md | 47 +----------- bower.json | 3 +- ng-sortable.js | 191 ------------------------------------------------- 3 files changed, 4 insertions(+), 237 deletions(-) delete mode 100644 ng-sortable.js diff --git a/README.md b/README.md index e6934e0..5bfba40 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,9 @@ Demo: http://rubaxa.github.io/Sortable/ * Built using native HTML5 drag and drop API * Supports * [Meteor](https://github.com/SortableJS/meteor-sortablejs) - * [AngularJS](#ng) + * [AngularJS] + * [2+](https://github.com/SortableJS/angular-sortablejs) + * [1.*](https://github.com/SortableJS/angular-legacy-sortablejs) * React * [ES2015+](https://github.com/SortableJS/react-sortablejs) * [Mixin](https://github.com/SortableJS/react-mixin-sortablejs) @@ -325,49 +327,6 @@ The speed at which the window should scroll once the mouse pointer gets within t --- - -### Support AngularJS -Include [ng-sortable.js](ng-sortable.js) - -Demo: http://jsbin.com/naduvo/1/edit?html,js,output - -```html -
- - - - - -
-``` - - -```js -angular.module('myApp', ['ng-sortable']) - .controller('demo', ['$scope', function ($scope) { - $scope.items = ['item 1', 'item 2']; - $scope.foo = ['foo 1', '..']; - $scope.bar = ['bar 1', '..']; - $scope.barConfig = { - group: 'foobar', - animation: 150, - onSort: function (/** ngSortEvent */evt){ - // @see https://github.com/RubaXa/Sortable/blob/master/ng-sortable.js#L18-L24 - } - }; - }]); -``` - - ---- - - ### Method diff --git a/bower.json b/bower.json index deabf8a..cd27f02 100644 --- a/bower.json +++ b/bower.json @@ -1,8 +1,7 @@ { "name": "Sortable", "main": [ - "Sortable.js", - "ng-sortable.js" + "Sortable.js" ], "homepage": "http://rubaxa.github.io/Sortable/", "authors": [ diff --git a/ng-sortable.js b/ng-sortable.js deleted file mode 100644 index 8cc7dee..0000000 --- a/ng-sortable.js +++ /dev/null @@ -1,191 +0,0 @@ -/** - * @author RubaXa - * @licence MIT - */ -(function (factory) { - 'use strict'; - - if (typeof define === 'function' && define.amd) { - define(['angular', './Sortable'], factory); - } - else if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') { - require('angular'); - factory(angular, require('./Sortable')); - module.exports = 'ng-sortable'; - } - else if (window.angular && window.Sortable) { - factory(angular, Sortable); - } -})(function (angular, Sortable) { - 'use strict'; - - - /** - * @typedef {Object} ngSortEvent - * @property {*} model List item - * @property {Object|Array} models List of items - * @property {number} oldIndex before sort - * @property {number} newIndex after sort - */ - - var expando = 'Sortable:ng-sortable'; - - angular.module('ng-sortable', []) - .constant('ngSortableVersion', '0.4.0') - .constant('ngSortableConfig', {}) - .directive('ngSortable', ['$parse', 'ngSortableConfig', function ($parse, ngSortableConfig) { - var removed, - nextSibling, - getSourceFactory = function getSourceFactory(el, scope) { - var ngRepeat = [].filter.call(el.childNodes, function (node) { - return ( - (node.nodeType === 8) && - (node.nodeValue.indexOf('ngRepeat:') !== -1) - ); - })[0]; - - if (!ngRepeat) { - // Without ng-repeat - return function () { - return null; - }; - } - - // tests: http://jsbin.com/kosubutilo/1/edit?js,output - ngRepeat = ngRepeat.nodeValue.match(/ngRepeat:\s*(?:\(.*?,\s*)?([^\s)]+)[\s)]+in\s+([^\s|]+)/); - - var itemsExpr = $parse(ngRepeat[2]); - - return function () { - return itemsExpr(scope.$parent) || []; - }; - }; - - - // Export - return { - restrict: 'AC', - scope: { ngSortable: "=?" }, - link: function (scope, $el) { - var el = $el[0], - options = angular.extend(scope.ngSortable || {}, ngSortableConfig), - watchers = [], - getSource = getSourceFactory(el, scope), - sortable - ; - - el[expando] = getSource; - - function _emitEvent(/**Event*/evt, /*Mixed*/item) { - var name = 'on' + evt.type.charAt(0).toUpperCase() + evt.type.substr(1); - var source = getSource(); - - /* jshint expr:true */ - options[name] && options[name]({ - model: item || source[evt.newIndex], - models: source, - oldIndex: evt.oldIndex, - newIndex: evt.newIndex - }); - } - - - function _sync(/**Event*/evt) { - var items = getSource(); - - if (!items) { - // Without ng-repeat - return; - } - - var oldIndex = evt.oldIndex, - newIndex = evt.newIndex; - - if (el !== evt.from) { - var prevItems = evt.from[expando](); - - removed = prevItems[oldIndex]; - - if (evt.clone) { - removed = angular.copy(removed); - prevItems.splice(Sortable.utils.index(evt.clone), 0, prevItems.splice(oldIndex, 1)[0]); - evt.from.removeChild(evt.clone); - } - else { - prevItems.splice(oldIndex, 1); - } - - items.splice(newIndex, 0, removed); - - evt.from.insertBefore(evt.item, nextSibling); // revert element - } - else { - items.splice(newIndex, 0, items.splice(oldIndex, 1)[0]); - } - - scope.$apply(); - } - - - sortable = Sortable.create(el, Object.keys(options).reduce(function (opts, name) { - opts[name] = opts[name] || options[name]; - return opts; - }, { - onStart: function (/**Event*/evt) { - nextSibling = evt.from === evt.item.parentNode ? evt.item.nextSibling : evt.clone.nextSibling; - _emitEvent(evt); - scope.$apply(); - }, - onEnd: function (/**Event*/evt) { - _emitEvent(evt, removed); - scope.$apply(); - }, - onAdd: function (/**Event*/evt) { - _sync(evt); - _emitEvent(evt, removed); - scope.$apply(); - }, - onUpdate: function (/**Event*/evt) { - _sync(evt); - _emitEvent(evt); - }, - onRemove: function (/**Event*/evt) { - _emitEvent(evt, removed); - }, - onSort: function (/**Event*/evt) { - _emitEvent(evt); - } - })); - - $el.on('$destroy', function () { - angular.forEach(watchers, function (/** Function */unwatch) { - unwatch(); - }); - - sortable.destroy(); - - el[expando] = null; - el = null; - watchers = null; - sortable = null; - nextSibling = null; - }); - - angular.forEach([ - 'sort', 'disabled', 'draggable', 'handle', 'animation', 'group', 'ghostClass', 'filter', - 'onStart', 'onEnd', 'onAdd', 'onUpdate', 'onRemove', 'onSort' - ], function (name) { - watchers.push(scope.$watch('ngSortable.' + name, function (value) { - if (value !== void 0) { - options[name] = value; - - if (!/^on[A-Z]/.test(name)) { - sortable.option(name, value); - } - } - })); - }); - } - }; - }]); -});