Skip to content

Commit 86bf638

Browse files
committed
use 'triggerKeys' for all keys
1 parent 49f74df commit 86bf638

File tree

1 file changed

+105
-124
lines changed

1 file changed

+105
-124
lines changed

src/js/mdKeyboard.directive.js

Lines changed: 105 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,10 @@ function useKeyboardDirective($mdKeyboard, $timeout, $animate, $rootScope) {
7272
}
7373

7474
function mdKeyboardController($scope) {
75-
if (attrs.useKeyboard) {
76-
$mdKeyboard.useLayout(attrs.useKeyboard);
77-
}
78-
79-
var toggleCaps = function () {
80-
$scope.caps = !$scope.caps;
81-
};
82-
83-
var toggleCapsLock = function () {
84-
$scope.capsLocked = !$scope.capsLocked;
85-
};
75+
$mdKeyboard.useLayout(attrs.useKeyboard);
8676

8777
var getKeyClass = function (key) {
88-
var k = key[0].toLowerCase();
78+
var k = (key[0] || ' ').toLowerCase();
8979
var keys = ['bksp', 'tab', 'caps', 'enter', 'shift', 'alt', 'altgr', 'altlk'];
9080

9181
// space bar
@@ -104,14 +94,114 @@ function useKeyboardDirective($mdKeyboard, $timeout, $animate, $rootScope) {
10494
return 'key-' + k;
10595
};
10696

97+
var triggerKey = function($event, key) {
98+
$event.preventDefault();
99+
100+
switch (key) {
101+
case "Caps":
102+
$scope.capsLocked = !$scope.capsLocked;
103+
$scope.caps = false;
104+
break;
105+
106+
case "Shift":
107+
$scope.caps = !$scope.caps;
108+
break;
109+
110+
case "Alt":
111+
case "AltGr":
112+
case "AltLk":
113+
// modify input, visualize
114+
//self.VKI_modify(type);
115+
break;
116+
117+
case "Tab":
118+
// TODO: handle text selection
119+
120+
// cycle through elements
121+
// or insert \t tab
122+
//if (self.VKI_activeTab) {
123+
// if (self.VKI_target.form) {
124+
// var target = self.VKI_target, elems = target.form.elements;
125+
// self.VKI_close(false);
126+
// for (var z = 0, me = false, j = -1; z < elems.length; z++) {
127+
// if (j == -1 && elems[z].getAttribute("VKI_attached")) j = z;
128+
// if (me) {
129+
// if (self.VKI_activeTab == 1 && elems[z]) break;
130+
// if (elems[z].getAttribute("VKI_attached")) break;
131+
// } else if (elems[z] == target) me = true;
132+
// }
133+
// if (z == elems.length) z = Math.max(j, 0);
134+
// if (elems[z].getAttribute("VKI_attached")) {
135+
// self.VKI_show(elems[z]);
136+
// } else elems[z].focus();
137+
// } else self.VKI_target.focus();
138+
//} else self.VKI_insert("\t");
139+
//return false;
140+
141+
$mdKeyboard.currentModel.$setViewValue(($mdKeyboard.currentModel.$viewValue || '') + "\t");
142+
$mdKeyboard.currentModel.$validate();
143+
$mdKeyboard.currentModel.$render();
144+
145+
break;
146+
147+
case "Bksp":
148+
// TODO: handle text selection
149+
150+
// backspace
151+
//self.VKI_target.focus();
152+
//if (self.VKI_target.setSelectionRange && hasSelectionStartEnd(self.VKI_target) && !self.VKI_target.readOnly) {
153+
// var rng = [self.VKI_target.selectionStart, self.VKI_target.selectionEnd];
154+
// if (rng[0] < rng[1]) rng[0]++;
155+
// self.VKI_target.value = self.VKI_target.value.substr(0, rng[0] - 1) + self.VKI_target.value.substr(rng[1]);
156+
// self.VKI_target.setSelectionRange(rng[0] - 1, rng[0] - 1);
157+
//} else if (self.VKI_target.createTextRange && !self.VKI_target.readOnly) {
158+
// try {
159+
// self.VKI_target.range.select();
160+
// } catch (e) {
161+
// self.VKI_target.range = document.selection.createRange();
162+
// }
163+
// if (!self.VKI_target.range.text.length) self.VKI_target.range.moveStart('character', -1);
164+
// self.VKI_target.range.text = "";
165+
//} else self.VKI_target.value = self.VKI_target.value.substr(0, self.VKI_target.value.length - 1);
166+
//if (self.VKI_shift) self.VKI_modify("Shift");
167+
//if (self.VKI_altgr) self.VKI_modify("AltGr");
168+
//self.VKI_target.focus();
169+
//self.keyInputCallback();
170+
//return true;
171+
172+
$mdKeyboard.currentModel.$setViewValue(($mdKeyboard.currentModel.$viewValue || '').slice(0, -1));
173+
$mdKeyboard.currentModel.$validate();
174+
$mdKeyboard.currentModel.$render();
175+
176+
break;
177+
178+
case "Enter":
179+
if (element[0].nodeName.toUpperCase() != 'TEXTAREA') {
180+
$timeout(function () {
181+
angular.element(element[0].form).triggerHandler('submit');
182+
});
183+
} else {
184+
$mdKeyboard.currentModel.$setViewValue(($mdKeyboard.currentModel.$viewValue || '') + "\n");
185+
$mdKeyboard.currentModel.$validate();
186+
$mdKeyboard.currentModel.$render();
187+
}
188+
189+
break;
190+
191+
default:
192+
$mdKeyboard.currentModel.$setViewValue(($mdKeyboard.currentModel.$viewValue || '') + key[0]);
193+
$mdKeyboard.currentModel.$validate();
194+
$mdKeyboard.currentModel.$render();
195+
196+
$scope.caps = false;
197+
}
198+
};
199+
107200
var _init = function () {
108201
$scope.resolve = function () {
109202
$mdKeyboard.hide('ok');
110203
};
111204
$scope.getKeyClass = getKeyClass;
112-
$scope.keyboard = $mdKeyboard.getLayout();
113-
$scope.toggleCaps = toggleCaps;
114-
$scope.toggleCapsLock = toggleCapsLock;
115205
$scope.keyboard = $mdKeyboard.getCurrentLayout();
116206
$scope.pressed = triggerKey;
117207

@@ -134,115 +224,6 @@ function useKeyboardDirective($mdKeyboard, $timeout, $animate, $rootScope) {
134224
sel.moveStart('character', -element.value.length);
135225
return sel.text.length - selLen;
136226
}
137-
};
138-
139-
function triggerKey($event, key) {
140-
$event.preventDefault();
141-
$log.info('key pressed: %s (%s)', key, key.charCodeAt(0));
142-
143-
switch (key) {
144-
case "Caps":
145-
case "Shift":
146-
case "Alt":
147-
case "AltGr":
148-
case "AltLk":
149-
// modify input, visualize
150-
//self.VKI_modify(type);
151-
break;
152-
153-
case "Tab":
154-
// TODO: handle text selection
155-
156-
// cycle through elements
157-
// or insert \t tab
158-
//if (self.VKI_activeTab) {
159-
// if (self.VKI_target.form) {
160-
// var target = self.VKI_target, elems = target.form.elements;
161-
// self.VKI_close(false);
162-
// for (var z = 0, me = false, j = -1; z < elems.length; z++) {
163-
// if (j == -1 && elems[z].getAttribute("VKI_attached")) j = z;
164-
// if (me) {
165-
// if (self.VKI_activeTab == 1 && elems[z]) break;
166-
// if (elems[z].getAttribute("VKI_attached")) break;
167-
// } else if (elems[z] == target) me = true;
168-
// }
169-
// if (z == elems.length) z = Math.max(j, 0);
170-
// if (elems[z].getAttribute("VKI_attached")) {
171-
// self.VKI_show(elems[z]);
172-
// } else elems[z].focus();
173-
// } else self.VKI_target.focus();
174-
//} else self.VKI_insert("\t");
175-
//return false;
176-
177-
$mdKeyboard.currentModel.$setViewValue(($mdKeyboard.currentModel.$viewValue || '') + "\t");
178-
$mdKeyboard.currentModel.$validate();
179-
$mdKeyboard.currentModel.$render();
180-
181-
break;
182-
183-
case "Bksp":
184-
// TODO: handle text selection
185-
186-
// backspace
187-
//self.VKI_target.focus();
188-
//if (self.VKI_target.setSelectionRange && hasSelectionStartEnd(self.VKI_target) && !self.VKI_target.readOnly) {
189-
// var rng = [self.VKI_target.selectionStart, self.VKI_target.selectionEnd];
190-
// if (rng[0] < rng[1]) rng[0]++;
191-
// self.VKI_target.value = self.VKI_target.value.substr(0, rng[0] - 1) + self.VKI_target.value.substr(rng[1]);
192-
// self.VKI_target.setSelectionRange(rng[0] - 1, rng[0] - 1);
193-
//} else if (self.VKI_target.createTextRange && !self.VKI_target.readOnly) {
194-
// try {
195-
// self.VKI_target.range.select();
196-
// } catch (e) {
197-
// self.VKI_target.range = document.selection.createRange();
198-
// }
199-
// if (!self.VKI_target.range.text.length) self.VKI_target.range.moveStart('character', -1);
200-
// self.VKI_target.range.text = "";
201-
//} else self.VKI_target.value = self.VKI_target.value.substr(0, self.VKI_target.value.length - 1);
202-
//if (self.VKI_shift) self.VKI_modify("Shift");
203-
//if (self.VKI_altgr) self.VKI_modify("AltGr");
204-
//self.VKI_target.focus();
205-
//self.keyInputCallback();
206-
//return true;
207-
208-
$mdKeyboard.currentModel.$setViewValue(($mdKeyboard.currentModel.$viewValue || '').slice(0, -1));
209-
$mdKeyboard.currentModel.$validate();
210-
$mdKeyboard.currentModel.$render();
211-
212-
break;
213-
214-
case "Enter":
215-
if (element[0].nodeName.toUpperCase() != 'TEXTAREA') {
216-
$timeout(function () {
217-
angular.element(element[0].form).triggerHandler('submit');
218-
});
219-
} else {
220-
$mdKeyboard.currentModel.$setViewValue(($mdKeyboard.currentModel.$viewValue || '') + "\n");
221-
$mdKeyboard.currentModel.$validate();
222-
$mdKeyboard.currentModel.$render();
223-
}
224-
225-
break;
226-
227-
default:
228-
// TODO: handle text selection
229-
230-
//$timeout(function () {
231-
//var event = new window.KeyboardEvent('keypress', {
232-
// bubbles: true,
233-
// cancelable: true,
234-
// shiftKey: true,
235-
// keyCode: key.charCodeAt(0)
236-
//});
237-
// element[0].dispatchEvent(event);
238-
//});
239-
240-
$mdKeyboard.currentModel.$setViewValue(($mdKeyboard.currentModel.$viewValue || '') + key[0]);
241-
$mdKeyboard.currentModel.$validate();
242-
$mdKeyboard.currentModel.$render();
243-
244-
scope.caps = false;
245-
}
246227
}
247228

248229
function hideKeyboard() {

0 commit comments

Comments
 (0)