2A News

Gov. Hochul Declares Intent to Eradicate ‘Ghost Guns’

Reading Time: 2:2 min

As states that are bastions of Second Amendment opponents compete to see who can infringe on gun rights the most, New York may be taking the lead. In 2025, the…

View post

Pro-2A South Carolina Lawmakers Act to Defend Weapons Industry

Reading Time: 1:55 min

As more states opposed to Second Amendment rights dig in to launch attacks on the weapons industry, South Carolina lawmakers are bucking that trend. State Rep. Chris Wooten (R) recently…

View post

New Year’s Day Brings Spike in ATF Form Submissions and Chaos

Reading Time: 1:49 min

New Year’s Day is a time of rest—and recovery—for millions of Americans as the long holiday season finally wraps up. But for many gun owners and the Bureau of Alcohol,…

View post

Anti-2A Lawmakers Blast DOJ’s New Defense of Gun Rights

Reading Time: 2:11 min

Gun rights opponents are up in arms over the recent and dramatic pivot at the Department of Justice (DOJ) on gun rights. While much work remains, there is already a…

View post

Another In-Person Transaction Ends in Deadly Gunfire

Reading Time: 1:53 min

Meeting a total stranger somewhere to consummate a transaction is inherently risky, and there are an increasing number of reports of these encounters turning out to be nothing more than…

View post

Virginia Lawmakers Launch New Attacks on Second Amendment Rights

Reading Time: 3:23 min

Virginia’s 2026 General Assembly session rolls out this week, and anti-gun lawmakers are falling all over themselves in a mad dash to enact new gun control legislation. These Second Amendment…

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>