keyreceiver.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. define(function(require, exports, module) {
  2. var kity = require('./kity');
  3. var utils = require('./utils');
  4. var Minder = require('./minder');
  5. function listen(element, type, handler) {
  6. type.split(' ').forEach(function(name) {
  7. element.addEventListener(name, handler, false);
  8. });
  9. }
  10. Minder.registerInitHook(function(option) {
  11. this.setDefaultOptions({
  12. enableKeyReceiver: true
  13. });
  14. if (this.getOption('enableKeyReceiver')) {
  15. this.on('paperrender', function() {
  16. this._initKeyReceiver();
  17. });
  18. }
  19. });
  20. kity.extendClass(Minder, {
  21. _initKeyReceiver: function() {
  22. if (this._keyReceiver) return;
  23. var receiver = this._keyReceiver = document.createElement('input');
  24. receiver.classList.add('km-receiver');
  25. var renderTarget = this._renderTarget;
  26. renderTarget.appendChild(receiver);
  27. var minder = this;
  28. listen(receiver, 'keydown keyup keypress copy paste blur focus input', function(e) {
  29. switch (e.type) {
  30. case 'blur':
  31. minder.blur();
  32. break;
  33. case 'focus':
  34. minder.focus();
  35. break;
  36. case 'input':
  37. receiver.value = null;
  38. break;
  39. }
  40. minder._firePharse(e);
  41. e.preventDefault();
  42. });
  43. this.on('focus', function() {
  44. receiver.select();
  45. receiver.focus();
  46. });
  47. this.on('blur', function() {
  48. receiver.blur();
  49. });
  50. if (this.isFocused()) {
  51. receiver.select();
  52. receiver.focus();
  53. }
  54. }
  55. });
  56. });