2A News

California Anti-Gunners Push Mandatory Live-Fire Training for Buyers

Reading Time: 1:52 min

Keeping up with California’s latest infringements on the right to keep and bear arms is a full-time job. You’d think Golden State lawmakers would have more to do with their…

View post

ATF Director Nominee Sails Through Senate Hearing

Reading Time: 3:28 min

Robert Cekada’s nomination to head the Bureau of Alcohol, Tobacco, Firearms, and Explosives (ATF) encountered little resistance last week as he sailed through his Senate examination. Despite ongoing and pitched…

View post

Shock: US Attorney to Incarcerate Law-Abiding Gun Owners Entering DC

Reading Time: 2:2 min

National reciprocity is a cause whose time has come. There are far too many instances where a law-abiding gun owner is well within the law in one state or jurisdiction…

View post

Appeals Court: States May Criminalize Possession of Certain Knives

Reading Time: 1:55 min

A federal appeals court unanimously ruled on Friday that states may prohibit specific pocketknives.  As these instruments are historically weapons of self-defense and thus should be “arms,” Second Amendment advocates…

View post

NSSF: Background Checks for NFA Items Exploded in January

Reading Time: 1:51 min

Not only are U.S. firearm sales strong despite pulling back from recent record highs, but Americans have a renewed appetite for suppressors and other NFA items. The National Shooting Sports…

View post

Colorado Governor Breaks with Colleague Over Marijuana and Firearm Possession

Reading Time: 1:52 min

Second Amendment advocates anxiously await a long-overdue decision by the U.S. Supreme Court on gun rights and marijuana consumption. Strange bedfellows emerged in the buildup to the ruling, which is…

View post
<script>
  /*Source: https://github.com/Krzysztof-Antosik/Two-direction-Sticky-Sidebar*/
  
  // Verificar el ancho de pantalla al cargar y redimensionar
  function checkScreenWidth() {
    if (window.innerWidth <= 767) {
      // Si la pantalla es menor o igual a 676px, no ejecutar el código
      return;
    }

    const stickyElement = document.querySelector('.fb-sidebar__aside');
    const startPosition = stickyElement.getBoundingClientRect().top;

    let endScroll = window.innerHeight - stickyElement.offsetHeight - 500;
    let currPos = window.scrollY;
    let screenHeight = window.innerHeight;
    let stickyElementHeight = stickyElement.offsetHeight;
    let topGap = 40;
    let bottomGap = 40;

    setTimeout(() => {
      if (stickyElement.hasAttribute('data-top-gap')) {
        const dataTopGap = stickyElement.getAttribute('data-top-gap');
        topGap = dataTopGap === 'auto' ? startPosition : parseInt(dataTopGap);
      }

      if (stickyElement.hasAttribute('data-bottom-gap')) {
        bottomGap = parseInt(stickyElement.getAttribute('data-bottom-gap'));
      }
    }, 100);

    stickyElement.style.position = 'sticky';
    stickyElement.style.top = `${topGap}px`;
    stickyElement.style.height = 'fit-content';

    function positionStickySidebar() {
      endScroll = window.innerHeight - stickyElement.offsetHeight - bottomGap;
      const stickyElementTop = parseInt(stickyElement.style.top.replace('px', ''));

      if (stickyElementHeight + topGap + bottomGap > screenHeight) {
        if (window.scrollY < currPos) {
          if (stickyElementTop < topGap) {
            stickyElement.style.top = `${stickyElementTop + currPos - window.scrollY}px`;
          } else if (stickyElementTop >= topGap && stickyElementTop !== topGap) {
            stickyElement.style.top = `${topGap}px`;
          }
        } else {
          if (stickyElementTop > endScroll) {
            stickyElement.style.top = `${stickyElementTop + currPos - window.scrollY}px`;
          } else if (stickyElementTop < endScroll && stickyElementTop !== endScroll) {
            stickyElement.style.top = `${endScroll}px`;
          }
        }
      } else {
        stickyElement.style.top = `${topGap}px`;
      }
      currPos = window.scrollY;
    }

    function stickyElementToMe() {
      stickyElement.style.top = `${topGap}px`;
    }

    function updateSticky() {
      screenHeight = window.innerHeight;
      stickyElementHeight = stickyElement.offsetHeight;
      positionStickySidebar();
    }

    setTimeout(() => {
      window.addEventListener('resize', () => {
        currPos = window.scrollY;
        updateSticky();
      });

      document.addEventListener('scroll', updateSticky, {
        capture: true,
        passive: true
      });
    }, 1000);
  }

  // Verificar el ancho de pantalla al cargar y redimensionar
  window.addEventListener('load', checkScreenWidth);
  window.addEventListener('resize', checkScreenWidth);
</script>