2A News

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

NJ Gun Permit Regime Sued Over Racial Disparities

Reading Time: 1:57 min

It’s bad enough for a government entity to suppress constitutionally guaranteed Second Amendment rights. Somehow, New Jersey officials allegedly found a way to make their actions worse. According to the…

View post

Missouri’s Resurrected Second Amendment Protection Act Dies in Committee

Reading Time: 1:52 min

A valiant effort by Missouri lawmakers to reinforce gun rights for its citizens was brushed aside last week when a legislative committee overwhelmingly voted to kill it. The tally in…

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>