-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathangular-chronicle.js
More file actions
118 lines (96 loc) · 3.94 KB
/
angular-chronicle.js
File metadata and controls
118 lines (96 loc) · 3.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/**
* Copyright {2015} {Paul Cech}
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function () {
'use strict';
angular.module('angular.chronicle', [])
.service('commandHistoryService', function () {
// AngularJS will instantiate a singleton by calling "new" on this function
var commandHistory = [];
var commandCounter = 0;
return {
addCommand : function (_command) {
commandHistory.unshift(_command);
commandCounter = -1;
},
getNextCommand : function () {
var command = commandHistory[commandHistory.length - 1];
if (commandCounter < commandHistory.length - 1) {
commandCounter++;
command = commandHistory[commandCounter];
}
return command;
},
getLastCommand : function () {
var command = '';
if (commandCounter > 0) {
commandCounter--;
command = commandHistory[commandCounter];
}
else {
commandCounter = -1;
}
return command;
},
getCurrentCommand : function () {
var command = '';
if (commandHistory.length > 0) {
command = commandHistory[commandCounter];
}
return command;
},
resetCommandCounter : function () {
commandCounter = -1;
},
resetData : function () {
commandCounter = -1;
commandHistory = [];
}
};
})
.directive('commandHistory', ['commandHistoryService', function (commandHistoryService) {
return {
restrict: 'A',
require: 'ngModel',
link: function ($scope, $element, $attrs, ngModel) {
$element.bind('keydown', function (event) {
var currentValue = $element.val();
var command = '';
// Enter
if (event.which === 13) {
if (currentValue != undefined && currentValue != '') {
commandHistoryService.addCommand(currentValue);
}
}
// Up Arrow
else if (event.which === 38) {
command = commandHistoryService.getNextCommand();
$element.val(command);
ngModel.$setViewValue(command);
}
// Down Arrow
else if (event.which === 40) {
command = commandHistoryService.getLastCommand();
$element.val(command);
ngModel.$setViewValue(command);
}
if ($scope.$root.$$phase !== '$apply' && $scope.$root.$$phase !== '$digest') {
$scope.$apply();
}
});
}
};
}]);
}());