| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @fileoverview ChromeVox commands. | 6 * @fileoverview ChromeVox commands. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 goog.provide('CommandHandler'); | 9 goog.provide('CommandHandler'); |
| 10 | 10 |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 ChromeVoxState.instance.mode == ChromeVoxMode.NEXT_COMPAT) | 203 ChromeVoxState.instance.mode == ChromeVoxMode.NEXT_COMPAT) |
| 204 return true; | 204 return true; |
| 205 | 205 |
| 206 var current = ChromeVoxState.instance.currentRange_; | 206 var current = ChromeVoxState.instance.currentRange_; |
| 207 var dir = Dir.FORWARD; | 207 var dir = Dir.FORWARD; |
| 208 var pred = null; | 208 var pred = null; |
| 209 var predErrorMsg = undefined; | 209 var predErrorMsg = undefined; |
| 210 var rootPred = AutomationPredicate.root; | 210 var rootPred = AutomationPredicate.root; |
| 211 var speechProps = {}; | 211 var speechProps = {}; |
| 212 var skipSync = false; | 212 var skipSync = false; |
| 213 var didNavigate = false; |
| 213 switch (command) { | 214 switch (command) { |
| 214 case 'nextCharacter': | 215 case 'nextCharacter': |
| 216 didNavigate = true; |
| 215 speechProps['phoneticCharacters'] = true; | 217 speechProps['phoneticCharacters'] = true; |
| 216 current = current.move(cursors.Unit.CHARACTER, Dir.FORWARD); | 218 current = current.move(cursors.Unit.CHARACTER, Dir.FORWARD); |
| 217 break; | 219 break; |
| 218 case 'previousCharacter': | 220 case 'previousCharacter': |
| 221 didNavigate = true; |
| 219 speechProps['phoneticCharacters'] = true; | 222 speechProps['phoneticCharacters'] = true; |
| 220 current = current.move(cursors.Unit.CHARACTER, Dir.BACKWARD); | 223 current = current.move(cursors.Unit.CHARACTER, Dir.BACKWARD); |
| 221 break; | 224 break; |
| 222 case 'nextWord': | 225 case 'nextWord': |
| 226 didNavigate = true; |
| 223 current = current.move(cursors.Unit.WORD, Dir.FORWARD); | 227 current = current.move(cursors.Unit.WORD, Dir.FORWARD); |
| 224 break; | 228 break; |
| 225 case 'previousWord': | 229 case 'previousWord': |
| 230 didNavigate = true; |
| 226 current = current.move(cursors.Unit.WORD, Dir.BACKWARD); | 231 current = current.move(cursors.Unit.WORD, Dir.BACKWARD); |
| 227 break; | 232 break; |
| 228 case 'forward': | 233 case 'forward': |
| 229 case 'nextLine': | 234 case 'nextLine': |
| 235 didNavigate = true; |
| 230 current = current.move(cursors.Unit.LINE, Dir.FORWARD); | 236 current = current.move(cursors.Unit.LINE, Dir.FORWARD); |
| 231 break; | 237 break; |
| 232 case 'backward': | 238 case 'backward': |
| 233 case 'previousLine': | 239 case 'previousLine': |
| 240 didNavigate = true; |
| 234 current = current.move(cursors.Unit.LINE, Dir.BACKWARD); | 241 current = current.move(cursors.Unit.LINE, Dir.BACKWARD); |
| 235 break; | 242 break; |
| 236 case 'nextButton': | 243 case 'nextButton': |
| 237 dir = Dir.FORWARD; | 244 dir = Dir.FORWARD; |
| 238 pred = AutomationPredicate.button; | 245 pred = AutomationPredicate.button; |
| 239 predErrorMsg = 'no_next_button'; | 246 predErrorMsg = 'no_next_button'; |
| 240 break; | 247 break; |
| 241 case 'previousButton': | 248 case 'previousButton': |
| 242 dir = Dir.BACKWARD; | 249 dir = Dir.BACKWARD; |
| 243 pred = AutomationPredicate.button; | 250 pred = AutomationPredicate.button; |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 pred = AutomationPredicate.landmark; | 405 pred = AutomationPredicate.landmark; |
| 399 predErrorMsg = 'no_next_landmark'; | 406 predErrorMsg = 'no_next_landmark'; |
| 400 break; | 407 break; |
| 401 case 'previousLandmark': | 408 case 'previousLandmark': |
| 402 dir = Dir.BACKWARD; | 409 dir = Dir.BACKWARD; |
| 403 pred = AutomationPredicate.landmark; | 410 pred = AutomationPredicate.landmark; |
| 404 predErrorMsg = 'no_previous_landmark'; | 411 predErrorMsg = 'no_previous_landmark'; |
| 405 break; | 412 break; |
| 406 case 'right': | 413 case 'right': |
| 407 case 'nextObject': | 414 case 'nextObject': |
| 415 didNavigate = true; |
| 408 current = current.move(cursors.Unit.NODE, Dir.FORWARD); | 416 current = current.move(cursors.Unit.NODE, Dir.FORWARD); |
| 409 break; | 417 break; |
| 410 case 'left': | 418 case 'left': |
| 411 case 'previousObject': | 419 case 'previousObject': |
| 420 didNavigate = true; |
| 412 current = current.move(cursors.Unit.NODE, Dir.BACKWARD); | 421 current = current.move(cursors.Unit.NODE, Dir.BACKWARD); |
| 413 break; | 422 break; |
| 414 case 'previousGroup': | 423 case 'previousGroup': |
| 415 skipSync = true; | 424 skipSync = true; |
| 416 dir = Dir.BACKWARD; | 425 dir = Dir.BACKWARD; |
| 417 pred = AutomationPredicate.group; | 426 pred = AutomationPredicate.group; |
| 418 break; | 427 break; |
| 419 case 'nextGroup': | 428 case 'nextGroup': |
| 420 skipSync = true; | 429 skipSync = true; |
| 421 dir = Dir.FORWARD; | 430 dir = Dir.FORWARD; |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 656 var end = AutomationUtil.findNodePost(node, | 665 var end = AutomationUtil.findNodePost(node, |
| 657 command == 'goToLastCell' ? Dir.BACKWARD : Dir.FORWARD, | 666 command == 'goToLastCell' ? Dir.BACKWARD : Dir.FORWARD, |
| 658 AutomationPredicate.leaf); | 667 AutomationPredicate.leaf); |
| 659 if (end) | 668 if (end) |
| 660 current = cursors.Range.fromNode(end); | 669 current = cursors.Range.fromNode(end); |
| 661 break; | 670 break; |
| 662 default: | 671 default: |
| 663 return true; | 672 return true; |
| 664 } | 673 } |
| 665 | 674 |
| 675 if (didNavigate) |
| 676 chrome.metricsPrivate.recordUserAction('ChromeVox.Navigate'); |
| 677 |
| 666 if (pred) { | 678 if (pred) { |
| 679 chrome.metricsPrivate.recordUserAction('ChromeVox.Jump'); |
| 680 |
| 667 var bound = current.getBound(dir).node; | 681 var bound = current.getBound(dir).node; |
| 668 if (bound) { | 682 if (bound) { |
| 669 var node = AutomationUtil.findNextNode( | 683 var node = AutomationUtil.findNextNode( |
| 670 bound, dir, pred, {skipInitialAncestry: true}); | 684 bound, dir, pred, {skipInitialAncestry: true}); |
| 671 | 685 |
| 672 if (node && !skipSync) { | 686 if (node && !skipSync) { |
| 673 node = AutomationUtil.findNodePre( | 687 node = AutomationUtil.findNodePre( |
| 674 node, Dir.FORWARD, AutomationPredicate.object) || | 688 node, Dir.FORWARD, AutomationPredicate.object) || |
| 675 node; | 689 node; |
| 676 } | 690 } |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 754 break; | 768 break; |
| 755 } | 769 } |
| 756 if (announcement) { | 770 if (announcement) { |
| 757 cvox.ChromeVox.tts.speak( | 771 cvox.ChromeVox.tts.speak( |
| 758 announcement, cvox.QueueMode.FLUSH, | 772 announcement, cvox.QueueMode.FLUSH, |
| 759 cvox.AbstractTts.PERSONALITY_ANNOTATION); | 773 cvox.AbstractTts.PERSONALITY_ANNOTATION); |
| 760 } | 774 } |
| 761 }; | 775 }; |
| 762 | 776 |
| 763 }); // goog.scope | 777 }); // goog.scope |
| OLD | NEW |