2A News

2A Groups Challenge National Park Carry Ban

Reading Time: 1:59 min

Gun rights supporters have long contended that the federal law banning the carry of firearms in federal facilities is unconstitutional, particularly as it applies to national parks. Last week, the…

View post

Senate Candidate Breaks with Virginia Colleagues Over Second Amendment

Reading Time: 1:55 min

The Second Amendment is for every law-abiding American adult, regardless of political affiliation or socioeconomic status. Particularly in Virginia in 2026, the line on gun rights runs straight between the…

View post

NSSF: Chicago Spending $30 Million Annually to Protect Anti-2A Mayor

Reading Time: 1:60 min

The fact that a double standard on gun rights exists between the politically powerful and the rest of us is no surprise in 2026. Many U.S. leaders proclaim guns to…

View post

Maryland Mall Shopper Wields Firearm Against Three Alleged Attackers

Reading Time: 1:58 min

American malls may be a vestige of a bygone era, but many people still frequent them on shopping excursions. This, unfortunately, makes these locales into targets for bad guys who…

View post

FPC to Appeal Setback in Texas Ruling on ‘Sensitive Places’

Reading Time: 2:0 min

The Firearms Policy Coalition (FPC) is not discouraged by last week’s setback at the hands of a Texas judge. In a controversial decision, the jurist upheld the Lone Star State’s…

View post

Maryland’s Liability Lawsuit Against Glock Advances

Reading Time: 1:54 min

The shameless attacks on the weapons industry by powerful anti-gunners show no signs of abating, even with established federal law protecting Second Amendment-related businesses. On Monday, State Judge John Nugent…

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>