fundamental-ngx
Version:
SAP Fundamentals, implemented in Angular
124 lines • 10.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Subject } from 'rxjs';
import { Output } from '@angular/core';
var MenuKeyboardService = /** @class */ (function () {
function MenuKeyboardService() {
/**
* Event emitted when an item link is clicked.
*/
this.itemClicked = new Subject();
/**
* Whether user wants to remove keyboard handling
*/
this.disableKeydownHandling = false;
}
/** Function that should be called every time, keydown event is used on some menu item,
* it provides whole functionality for handling
* ArrowDown - focus, ArrowUp - focus, Space bar - simulate click, Enter key - simulate click.
* @param event KeyboardEvent
* @param index index of items starts from 0
* @param menuItems array of menu item directives
* */
/**
* Function that should be called every time, keydown event is used on some menu item,
* it provides whole functionality for handling
* ArrowDown - focus, ArrowUp - focus, Space bar - simulate click, Enter key - simulate click.
* @param {?} event KeyboardEvent
* @param {?} index index of items starts from 0
* @param {?} menuItems array of menu item directives
*
* @return {?}
*/
MenuKeyboardService.prototype.keyDownHandler = /**
* Function that should be called every time, keydown event is used on some menu item,
* it provides whole functionality for handling
* ArrowDown - focus, ArrowUp - focus, Space bar - simulate click, Enter key - simulate click.
* @param {?} event KeyboardEvent
* @param {?} index index of items starts from 0
* @param {?} menuItems array of menu item directives
*
* @return {?}
*/
function (event, index, menuItems) {
if (this.disableKeydownHandling) {
return;
}
switch (event.code) {
case ('ArrowDown'): {
if (menuItems.length > index + 1) {
menuItems[index + 1].focus();
}
else {
if (this.focusEscapeAfterList) {
this.focusEscapeAfterList();
}
else {
menuItems[0].focus();
}
}
event.preventDefault();
break;
}
case ('ArrowUp'): {
if (index > 0) {
menuItems[index - 1].focus();
}
else {
if (this.focusEscapeBeforeList) {
this.focusEscapeBeforeList();
}
else {
menuItems[menuItems.length - 1].focus();
}
}
event.preventDefault();
break;
}
case ('Space'): {
if (menuItems[index]) {
menuItems[index].click();
event.preventDefault();
}
break;
}
case ('Enter'): {
if (menuItems[index]) {
menuItems[index].click();
event.preventDefault();
}
break;
}
}
};
MenuKeyboardService.propDecorators = {
itemClicked: [{ type: Output }]
};
return MenuKeyboardService;
}());
export { MenuKeyboardService };
if (false) {
/**
* Event emitted when an item link is clicked.
* @type {?}
*/
MenuKeyboardService.prototype.itemClicked;
/**
* Whether user wants to remove keyboard handling
* @type {?}
*/
MenuKeyboardService.prototype.disableKeydownHandling;
/**
* Function that is supposed to be called, when focus escape before list
* @type {?}
*/
MenuKeyboardService.prototype.focusEscapeBeforeList;
/**
* Function that is supposed to be called, when focus escape after list
* @type {?}
*/
MenuKeyboardService.prototype.focusEscapeAfterList;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1rZXlib2FyZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZnVuZGFtZW50YWwtbmd4LyIsInNvdXJjZXMiOlsibGliL21lbnUvbWVudS1rZXlib2FyZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkM7SUFBQTs7OztRQUlvQixnQkFBVyxHQUFvQixJQUFJLE9BQU8sRUFBVSxDQUFDOzs7O1FBR3JFLDJCQUFzQixHQUFZLEtBQUssQ0FBQztJQWdFNUMsQ0FBQztJQXhERzs7Ozs7O1NBTUs7Ozs7Ozs7Ozs7O0lBQ0wsNENBQWM7Ozs7Ozs7Ozs7SUFBZCxVQUFlLEtBQW9CLEVBQUUsS0FBYSxFQUFFLFNBQThCO1FBRTlFLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQzdCLE9BQU87U0FDVjtRQUVELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNoQixLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUU7b0JBQzlCLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2hDO3FCQUFNO29CQUNILElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO3dCQUMzQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztxQkFDL0I7eUJBQU07d0JBQ0gsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUN4QjtpQkFDSjtnQkFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU07YUFDVDtZQUNELEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNkLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtvQkFDWCxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNoQztxQkFBTTtvQkFDSCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTt3QkFDNUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7cUJBQ2hDO3lCQUFNO3dCQUNILFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUMzQztpQkFDSjtnQkFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU07YUFDVDtZQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNaLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNsQixTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3pCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztpQkFDMUI7Z0JBQ0QsTUFBTTthQUNUO1lBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2xCLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUMxQjtnQkFDRCxNQUFNO2FBQ1Q7U0FDSjtJQUNMLENBQUM7OzhCQW5FQSxNQUFNOztJQW9FWCwwQkFBQztDQUFBLEFBdkVELElBdUVDO1NBdkVZLG1CQUFtQjs7Ozs7O0lBRzVCLDBDQUNxRTs7Ozs7SUFHckUscURBQXdDOzs7OztJQUd4QyxvREFBZ0M7Ozs7O0lBR2hDLG1EQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lbnVJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9tZW51LWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgTWVudUtleWJvYXJkU2VydmljZSB7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGl0ZW0gbGluayBpcyBjbGlja2VkLiovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGl0ZW1DbGlja2VkOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG5cbiAgICAvKiogV2hldGhlciB1c2VyIHdhbnRzIHRvIHJlbW92ZSBrZXlib2FyZCBoYW5kbGluZyAqL1xuICAgIGRpc2FibGVLZXlkb3duSGFuZGxpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCwgd2hlbiBmb2N1cyBlc2NhcGUgYmVmb3JlIGxpc3QgKi9cbiAgICBmb2N1c0VzY2FwZUJlZm9yZUxpc3Q6IEZ1bmN0aW9uO1xuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgY2FsbGVkLCB3aGVuIGZvY3VzIGVzY2FwZSBhZnRlciBsaXN0ICovXG4gICAgZm9jdXNFc2NhcGVBZnRlckxpc3Q6IEZ1bmN0aW9uO1xuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCBldmVyeSB0aW1lLCBrZXlkb3duIGV2ZW50IGlzIHVzZWQgb24gc29tZSBtZW51IGl0ZW0sXG4gICAgICogaXQgcHJvdmlkZXMgd2hvbGUgZnVuY3Rpb25hbGl0eSBmb3IgaGFuZGxpbmdcbiAgICAgKiBBcnJvd0Rvd24gLSBmb2N1cywgQXJyb3dVcCAtIGZvY3VzLCBTcGFjZSBiYXIgLSBzaW11bGF0ZSBjbGljaywgRW50ZXIga2V5IC0gc2ltdWxhdGUgY2xpY2suXG4gICAgICogQHBhcmFtIGV2ZW50IEtleWJvYXJkRXZlbnRcbiAgICAgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgaXRlbXMgc3RhcnRzIGZyb20gMFxuICAgICAqIEBwYXJhbSBtZW51SXRlbXMgYXJyYXkgb2YgbWVudSBpdGVtIGRpcmVjdGl2ZXNcbiAgICAgKiAqL1xuICAgIGtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyLCBtZW51SXRlbXM6IE1lbnVJdGVtRGlyZWN0aXZlW10pOiB2b2lkIHtcblxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlS2V5ZG93bkhhbmRsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgKCdBcnJvd0Rvd24nKToge1xuICAgICAgICAgICAgICAgIGlmIChtZW51SXRlbXMubGVuZ3RoID4gaW5kZXggKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbnVJdGVtc1tpbmRleCArIDFdLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNFc2NhcGVBZnRlckxpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNFc2NhcGVBZnRlckxpc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVJdGVtc1swXS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICgnQXJyb3dVcCcpOiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBtZW51SXRlbXNbaW5kZXggLSAxXS5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvY3VzRXNjYXBlQmVmb3JlTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0VzY2FwZUJlZm9yZUxpc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVJdGVtc1ttZW51SXRlbXMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAoJ1NwYWNlJyk6IHtcbiAgICAgICAgICAgICAgICBpZiAobWVudUl0ZW1zW2luZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICBtZW51SXRlbXNbaW5kZXhdLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAoJ0VudGVyJyk6IHtcbiAgICAgICAgICAgICAgICBpZiAobWVudUl0ZW1zW2luZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICBtZW51SXRlbXNbaW5kZXhdLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19