UNPKG

fundamental-ngx

Version:

SAP Fundamentals, implemented in Angular

169 lines 14.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Subject } from 'rxjs'; export class CalendarService { constructor() { /** * Event thrown, when the element is selected by space or enter keys */ this.onKeySelect = new Subject(); /** * Event thrown, when the focus goes after list of elements */ this.onListEndApproach = new Subject(); /** * Event thrown, when the focus goes before list of elements */ this.onListStartApproach = new Subject(); /** * Event thrown, when the focus is changed. */ this.onFocusIdChange = new Subject(); } /** * Method that provides, amount of day depending on month and year passed * @param {?} month which is number 1-12 * @param {?} year which is number * @return {?} */ static getDaysInMonth(month, year) { /** @type {?} */ const isLeapYear = (/** * @param {?} _year * @return {?} */ (_year) => { if (_year % 4 !== 0) { return false; } else if (_year % 400 === 0) { return true; } else { return _year % 100 !== 0; } }); if (month === 2) { return isLeapYear(year) ? 29 : 28; } else if ((month % 2 === 0 && month < 8) || (month % 2 === 1 && month > 8)) { return 30; } else { return 31; } } /** * Method that check equality of 2 dates. * @param {?} date1 * @param {?} date2 * @return {?} */ static datesEqual(date1, date2) { if (!date1 || !date2) { return false; } else { return date1.toDateString() === date2.toDateString(); } } /** * Method that handles keydown events, dedicated for Month and Year views, which have a list with 12 elements. * Triggers the events, when the focus approaches start and end of list. Or when there is basic change of focus. * Triggers also event, when the element is selected by enter key, or space bar. * @param {?} event KeyboardEvent * @param {?} index which is number (0 - 11) * @return {?} */ onKeydownHandler(event, index) { switch (event.code) { case 'Enter': case 'Space': { event.preventDefault(); this.onKeySelect.next(index); break; } case 'ArrowLeft': { event.preventDefault(); if (index === 0) { this.onListStartApproach.next(); this.onFocusIdChange.next(11); } else { this.onFocusIdChange.next(index - 1); } break; } case 'ArrowRight': { event.preventDefault(); if (index === 11) { this.onListEndApproach.next(); this.onFocusIdChange.next(0); } else { this.onFocusIdChange.next(index + 1); } break; } case 'ArrowUp': { event.preventDefault(); if (index <= 3) { this.onListStartApproach.next(); this.onFocusIdChange.next(index + 8); } else { this.onFocusIdChange.next(index - 4); } break; } case 'ArrowDown': { event.preventDefault(); if (index >= 8) { this.onListEndApproach.next(); this.onFocusIdChange.next(index - 8); } else { this.onFocusIdChange.next(index + 4); } break; } case 'Tab': { if (this.focusEscapeFunction && !event.shiftKey) { event.preventDefault(); this.focusEscapeFunction(); } break; } } } } if (false) { /** * Event thrown, when the element is selected by space or enter keys * @type {?} */ CalendarService.prototype.onKeySelect; /** * Event thrown, when the focus goes after list of elements * @type {?} */ CalendarService.prototype.onListEndApproach; /** * Event thrown, when the focus goes before list of elements * @type {?} */ CalendarService.prototype.onListStartApproach; /** * Event thrown, when the focus is changed. * @type {?} */ CalendarService.prototype.onFocusIdChange; /** * Function that is called when the focus would escape the element. * @type {?} */ CalendarService.prototype.focusEscapeFunction; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2Z1bmRhbWVudGFsLW5neC8iLCJzb3VyY2VzIjpbImxpYi9jYWxlbmRhci9jYWxlbmRhci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE1BQU0sT0FBTyxlQUFlO0lBQTVCOzs7O1FBR1csZ0JBQVcsR0FBb0IsSUFBSSxPQUFPLEVBQVUsQ0FBQzs7OztRQUdyRCxzQkFBaUIsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQzs7OztRQUd2RCx3QkFBbUIsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQzs7OztRQUd6RCxvQkFBZSxHQUFvQixJQUFJLE9BQU8sRUFBVSxDQUFDO0lBMkdwRSxDQUFDOzs7Ozs7O0lBakdHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBYSxFQUFFLElBQVk7O2NBRXZDLFVBQVU7Ozs7UUFBRyxDQUFDLEtBQWEsRUFBVyxFQUFFO1lBQzFDLElBQUksS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO2lCQUFNLElBQUksS0FBSyxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUU7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7aUJBQU07Z0JBQ0gsT0FBTyxLQUFLLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQzthQUM1QjtRQUNMLENBQUMsQ0FBQTtRQUVELElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNiLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNyQzthQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMs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QUM5QjtnQkFDRCxNQUFNO2FBQ1Q7U0FDSjtJQUNMLENBQUM7Q0FFSjs7Ozs7O0lBcEhHLHNDQUE0RDs7Ozs7SUFHNUQsNENBQThEOzs7OztJQUc5RCw4Q0FBZ0U7Ozs7O0lBR2hFLDBDQUFnRTs7Ozs7SUFHaEUsOENBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmREYXRlIH0gZnJvbSAnLi9tb2RlbHMvZmQtZGF0ZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjbGFzcyBDYWxlbmRhclNlcnZpY2Uge1xuXG4gICAgLyoqIEV2ZW50IHRocm93biwgd2hlbiB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCBieSBzcGFjZSBvciBlbnRlciBrZXlzICovXG4gICAgcHVibGljIG9uS2V5U2VsZWN0OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIHRoZSBmb2N1cyBnb2VzIGFmdGVyIGxpc3Qgb2YgZWxlbWVudHMgKi9cbiAgICBwdWJsaWMgb25MaXN0RW5kQXBwcm9hY2g6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biwgd2hlbiB0aGUgZm9jdXMgZ29lcyBiZWZvcmUgbGlzdCBvZiBlbGVtZW50cyAqL1xuICAgIHB1YmxpYyBvbkxpc3RTdGFydEFwcHJvYWNoOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gdGhlIGZvY3VzIGlzIGNoYW5nZWQuICovXG4gICAgcHVibGljIG9uRm9jdXNJZENoYW5nZTogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGZvY3VzIHdvdWxkIGVzY2FwZSB0aGUgZWxlbWVudC4gKi9cbiAgICBmb2N1c0VzY2FwZUZ1bmN0aW9uOiBGdW5jdGlvbjtcblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IHByb3ZpZGVzLCBhbW91bnQgb2YgZGF5IGRlcGVuZGluZyBvbiBtb250aCBhbmQgeWVhciBwYXNzZWRcbiAgICAgKiBAcGFyYW0gbW9udGggd2hpY2ggaXMgbnVtYmVyIDEtMTJcbiAgICAgKiBAcGFyYW0geWVhciB3aGljaCBpcyBudW1iZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RGF5c0luTW9udGgobW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyKTogbnVtYmVyIHtcblxuICAgICAgICBjb25zdCBpc0xlYXBZZWFyID0gKF95ZWFyOiBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIGlmIChfeWVhciAlIDQgIT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF95ZWFyICUgNDAwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBfeWVhciAlIDEwMCAhPT0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobW9udGggPT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyODtcbiAgICAgICAgfSBlbHNlIGlmICgobW9udGggJSAyID09PSAwICYmIG1vbnRoIDwgOCkgfHwgKG1vbnRoICUgMiA9PT0gMSAmJiBtb250aCA+IDgpKSB7XG4gICAgICAgICAgICByZXR1cm4gMzA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMzE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCBjaGVjayBlcXVhbGl0eSBvZiAyIGRhdGVzLlxuICAgICAqL1xuICAgIHN0YXRpYyBkYXRlc0VxdWFsKGRhdGUxOiBGZERhdGUsIGRhdGUyOiBGZERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFkYXRlMSB8fCAhZGF0ZTIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlMS50b0RhdGVTdHJpbmcoKSA9PT0gZGF0ZTIudG9EYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCBoYW5kbGVzIGtleWRvd24gZXZlbnRzLCBkZWRpY2F0ZWQgZm9yIE1vbnRoIGFuZCBZZWFyIHZpZXdzLCB3aGljaCBoYXZlIGEgbGlzdCB3aXRoIDEyIGVsZW1lbnRzLlxuICAgICAqIFRyaWdnZXJzIHRoZSBldmVudHMsIHdoZW4gdGhlIGZvY3VzIGFwcHJvYWNoZXMgc3RhcnQgYW5kIGVuZCBvZiBsaXN0LiBPciB3aGVuIHRoZXJlIGlzIGJhc2ljIGNoYW5nZSBvZiBmb2N1cy5cbiAgICAgKiBUcmlnZ2VycyBhbHNvIGV2ZW50LCB3aGVuIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkIGJ5IGVudGVyIGtleSwgb3Igc3BhY2UgYmFyLlxuICAgICAqIEBwYXJhbSBldmVudCBLZXlib2FyZEV2ZW50XG4gICAgICogQHBhcmFtIGluZGV4IHdoaWNoIGlzIG51bWJlciAoMCAtIDExKVxuICAgICAqL1xuICAgIHB1YmxpYyBvbktleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgY2FzZSAnU3BhY2UnOiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uS2V5U2VsZWN0Lm5leHQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0Jzoge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25MaXN0U3RhcnRBcHByb2FjaC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Gb2N1c0lkQ2hhbmdlLm5leHQoMTEpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZvY3VzSWRDaGFuZ2UubmV4dChpbmRleCAtIDEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkxpc3RFbmRBcHByb2FjaC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Gb2N1c0lkQ2hhbmdlLm5leHQoMClcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRm9jdXNJZENoYW5nZS5uZXh0KGluZGV4ICsgMSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzoge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDw9IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkxpc3RTdGFydEFwcHJvYWNoLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZvY3VzSWRDaGFuZ2UubmV4dChpbmRleCArIDgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Gb2N1c0lkQ2hhbmdlLm5leHQoaW5kZXggLSA0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gOCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTGlzdEVuZEFwcHJvYWNoLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZvY3VzSWRDaGFuZ2UubmV4dChpbmRleCAtIDgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Gb2N1c0lkQ2hhbmdlLm5leHQoaW5kZXggKyA0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdUYWInOiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbiAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0VzY2FwZUZ1bmN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=