| /** |
| * Hint menu |
| */ |
| define([ |
| 'menu', |
| 'hint/item', |
| 'hint/prefix', |
| 'hint/lengthField' |
| ], function ( |
| menuClass, |
| itemClass, |
| prefixClass, |
| lengthFieldClass) { |
| |
| return { |
| |
| /** |
| * Create new hint helper menu. |
| */ |
| create : function (hint, context, params) { |
| var obj = Object.create(menuClass) |
| .upgradeTo(this) |
| ._init(params, { |
| itemClass : itemClass, |
| prefixClass : prefixClass, |
| lengthFieldClass : lengthFieldClass |
| }); |
| obj._context = context; |
| obj._element.classList.add('hint'); |
| obj._hint = hint; |
| |
| // Make the top item always active |
| obj._firstActive = true; |
| |
| obj.element().addEventListener('blur', function (e) { |
| this.menu.hide(); // WithoutDestruction(); |
| }); |
| |
| // Focus on input field on hide |
| obj.onHide = function () { |
| var h = this._hint; |
| h._inputField.element().focus(); |
| if (h.active() !== null) { |
| if (h._alert.active) { |
| h._unshowAlert(); |
| }; |
| h.active(null); |
| }; |
| }; |
| |
| return obj; |
| }, |
| |
| /** |
| * The hint helper object, |
| * the menu is attached to. |
| */ |
| hint : function () { |
| return this._hint; |
| } |
| }; |
| }); |