}
}
+ grid.onColumnDrag = function(col) {
+ // track which column we're dragging
+ grid.dragColumn = col;
+ }
+
+ grid.onColumnDrop = function(target) {
+ if (angular.isUndefined(target)) return;
+ if (target == grid.dragColumn) return;
+ var srcIdx, targetIdx, srcCol;
+ angular.forEach(grid.columnsProvider.columns,
+ function(col, idx) {
+ if (col.name == grid.dragColumn) {
+ srcIdx = idx;
+ srcCol = col;
+ } else if (col.name == target) {
+ targetIdx = idx;
+ }
+ }
+ );
+
+ if (srcIdx < targetIdx) targetIdx--;
+
+ // move src column from old location to new location in
+ // the columns array, then force a page refresh
+ grid.columnsProvider.columns.splice(srcIdx, 1);
+ grid.columnsProvider.columns.splice(targetIdx, 0, srcCol);
+ $scope.$apply();
+ }
+
// asks the dataProvider for a page of data
grid.collect = function() {
grid.items = [];
}
])
+.directive('egGridColumnDragSource', function() {
+ return {
+ restrict : 'A',
+ require : '^egGrid',
+ link : function(scope, element, attrs, egGridCtrl) {
+ angular.element(element).attr('draggable', 'true');
+ element.bind('dragstart', function(e) {
+ egGridCtrl.onColumnDrag(attrs.column);
+ });
+ }
+ };
+})
+
+.directive('egGridColumnDragDest', function() {
+ return {
+ restrict : 'A',
+ require : '^egGrid',
+ link : function(scope, element, attrs, egGridCtrl) {
+ element.bind('dragover', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ e.dataTransfer.dropEffect = 'copy';
+ });
+
+ element.bind('drop', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ egGridCtrl.onColumnDrop(attrs.column);
+ });
+ }
+ };
+})
+
+
+
/**
* Translates bare IDL object values into display values.
* 1. Passes dates through the angular date filter