Skip to content

Commit 6c85fb7

Browse files
committed
Allow ordering by expression as well as string
1 parent 7d9eac2 commit 6c85fb7

File tree

3 files changed

+41
-30
lines changed

3 files changed

+41
-30
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ Attributes of angular treecontrol
129129
- `labelSelected` : inject classes into the div element around the label only when the node is selected
130130
- `order-by` : value for ng-repeat to use for ordering sibling nodes
131131
- `reverse-order` : whether or not to reverse the ordering of sibling nodes based on the value of `order-by`
132+
- `order-by-expression` : Expression evaluated by ng-repeat to use for ordering sibling nodes
132133
- `filter-expression` : value for ng-repeat to use for filtering the sibling nodes
133134
- `filter-comparator` : value for ng-repeat to use for comparing nodes with the filter expression
134135

angular-tree-control.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
onNodeToggle: "&",
3737
options: "=?",
3838
orderBy: "@",
39+
orderByExpression: "=?",
3940
reverseOrder: "@",
4041
filterExpression: "=?",
4142
filterComparator: "=?"
@@ -197,7 +198,12 @@
197198
};
198199

199200
//tree template
200-
var orderBy = $scope.orderBy ? ' | orderBy:orderBy:reverseOrder' : '';
201+
var orderBy = '';
202+
if ($scope.orderByExpression) {
203+
orderBy = ' | orderBy:orderByExpression:reverseOrder';
204+
} else if ($scope.orderBy) {
205+
orderBy = ' | orderBy:orderBy:reverseOrder';
206+
}
201207
var template =
202208
'<ul '+classIfDefined($scope.options.injectClasses.ul, true)+'>' +
203209
'<li ng-repeat="node in node.' + $scope.options.nodeChildren + ' | filter:filterExpression:filterComparator ' + orderBy + '" ng-class="headClass(node)" '+classIfDefined($scope.options.injectClasses.li, true)+'>' +

test/angular-tree-control-test.js

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
describe('treeControl', function() {
2-
var $compile, $rootScope, element, num;
2+
var $compile, $rootScope, orderBy, element, num;
33

44
beforeEach(function () {
55
module('treeControl');
@@ -357,34 +357,38 @@ describe('treeControl', function() {
357357
expect(element.find('li:eq(2)').text()).toBe('b');
358358
});
359359

360-
it('should order sibling nodes in normal order', function() {
361-
$rootScope.treedata = [
362-
{ label: "a", children: [] },
363-
{ label: "c", children: [] },
364-
{ label: "b", children: [] }
365-
];
366-
$rootScope.predicate = 'label';
367-
$rootScope.reverse = false;
368-
element = $compile('<treecontrol tree-model="treedata" order-by="{{predicate}}" reverse-order="{{reverse}}">{{node.label}}</treecontrol>')($rootScope);
369-
$rootScope.$digest();
370-
expect(element.find('li:eq(0)').text()).toBe('a');
371-
expect(element.find('li:eq(1)').text()).toBe('b');
372-
expect(element.find('li:eq(2)').text()).toBe('c');
373-
});
374-
375-
it('should order sibling nodes in reverse order', function() {
376-
$rootScope.treedata = [
377-
{ label: "a", children: [] },
378-
{ label: "c", children: [] },
379-
{ label: "b", children: [] }
380-
];
381-
$rootScope.predicate = 'label';
382-
$rootScope.reverse = true;
383-
element = $compile('<treecontrol tree-model="treedata" order-by="{{predicate}}" reverse-order="{{reverse}}">{{node.label}}</treecontrol>')($rootScope);
384-
$rootScope.$digest();
385-
expect(element.find('li:eq(0)').text()).toBe('c');
386-
expect(element.find('li:eq(1)').text()).toBe('b');
387-
expect(element.find('li:eq(2)').text()).toBe('a');
360+
[false, true].forEach(function (orderbyExpression) {
361+
it('should order sibling nodes in normal order', function() {
362+
$rootScope.treedata = [
363+
{ label: "a", children: [] },
364+
{ label: "c", children: [] },
365+
{ label: "b", children: [] }
366+
];
367+
$rootScope.predicate = 'label';
368+
$rootScope.reverse = false;
369+
orderBy = orderbyExpression ? 'order-by-expression="predicate"' : 'order-by="{{predicate}}"';
370+
element = $compile('<treecontrol tree-model="treedata" ' + orderBy + ' reverse-order="{{reverse}}">{{node.label}}</treecontrol>')($rootScope);
371+
$rootScope.$digest();
372+
expect(element.find('li:eq(0)').text()).toBe('a');
373+
expect(element.find('li:eq(1)').text()).toBe('b');
374+
expect(element.find('li:eq(2)').text()).toBe('c');
375+
});
376+
377+
it('should order sibling nodes in reverse order', function() {
378+
$rootScope.treedata = [
379+
{ label: "a", children: [] },
380+
{ label: "c", children: [] },
381+
{ label: "b", children: [] }
382+
];
383+
$rootScope.predicate = 'label';
384+
$rootScope.reverse = true;
385+
orderBy = orderbyExpression ? 'order-by-expression="predicate"' : 'order-by="{{predicate}}"';
386+
element = $compile('<treecontrol tree-model="treedata" ' + orderBy + ' reverse-order="{{reverse}}">{{node.label}}</treecontrol>')($rootScope);
387+
$rootScope.$digest();
388+
expect(element.find('li:eq(0)').text()).toBe('c');
389+
expect(element.find('li:eq(1)').text()).toBe('b');
390+
expect(element.find('li:eq(2)').text()).toBe('a');
391+
});
388392
});
389393

390394
it('should be able to accept alternative children variable name', function () {

0 commit comments

Comments
 (0)