SU-SWS/caw_profile

View on GitHub
themes/stanford_basic/src/js/components/secondary-nav/common/events/OnTab.js

Summary

Maintainability
A
1 hr
Test Coverage
import EventAbstract from './EventAbstract';

/**
 * OnTab
 *
 * Event action handler class.
 */
export default class OnTab extends EventAbstract {

  /**
   * Execute the action to the event.
   */
  exec() {
    const shifted = event.shiftKey;
    let firstItem = false;
    let lastItem = false;

    try {
      firstItem = this.masterNav.elem.querySelector('a');
    }
    catch (err) {
      firstItem = this.masterNav.elem.firstElementChild;
    }

    try {
      lastItem = this.masterNav.elem.querySelector(':scope > ul > li:last-child');
    }
    catch (err) {
      lastItem = this.masterNav.elem.lastElementChild.lastElementChild;
    }

    // If shift key is held.
    if (shifted) {
      if (this.target === firstItem) {
        this.masterNav.closeAllSubNavs();
        return;
      }
    }
    // No shift key, just regular ol tab.
    else {
      if (this.target.parentNode === lastItem) {
        this.masterNav.closeAllSubNavs();
        return;
      }
    }
  }
}