angular.module('NgSortable', [])
.directive 'ngSortable', ($parse)-> template: (element) -> '<span>' + element[0].innerHTML + '</span><i class="sort"></i>' link: (scope,element,attributes) -> scopeName = attributes.ngScopeName || scope.$id angular.sortableField = {} unless angular.sortableField angular.sortableField[scopeName] = {sortableReverse: false} unless angular.sortableField[scopeName] scope.sortableField = (resource)-> return resource.position unless !!angular.sortableField[scopeName].howToSortField angular.sortableField[scopeName].howToSortField(resource) scope.sortableReverse = -> angular.sortableField[scopeName].sortableReverse sortableFunc = $parse(attributes.ngSortable) icon = element.find('i') if Object.keys(attributes).includes('ngInitialSort') angular.sortableField[scopeName].howToSortField = sortableFunc if attributes.ngInitialSort == 'reverse' angular.sortableField[scopeName].sortableReverse = true icon.addClass('up') else icon.addClass('down') icon.bind 'click', -> element.parent().find('i').removeClass('up') element.parent().find('i').removeClass('down') scope.$apply -> if angular.sortableField[scopeName].howToSortField == sortableFunc angular.sortableField[scopeName].sortableReverse = !angular.sortableField[scopeName].sortableReverse else angular.sortableField[scopeName].sortableReverse = false angular.sortableField[scopeName].howToSortFieldi = attributes.ngSortable angular.sortableField[scopeName].howToSortField = sortableFunc if angular.sortableField[scopeName].sortableReverse == false icon.addClass('down') icon.removeClass('up') else icon.addClass('up') icon.removeClass('down')