2A News

New Hampshire Lawmakers Act to Strengthen 2A Protections

Reading Time: 1:56 min

The war raging between state and local governments over who may restrict constitutional liberties expanded into New Hampshire in recent days. A bill reestablishing the Legislature’s supremacy over local agencies…

View post

NSSF Celebrates End of Controversial Export Restrictions

Reading Time: 1:55 min

It is no secret that the previous administration did everything in its considerable power to tear down the Second Amendment. Part of this scheme included oppressive export restrictions on the…

View post

Governor Suggests Constitutional Amendment Banning ‘Assault Rifles’

Reading Time: 2:3 min

Current Minnesota governor and former vice-presidential candidate Tim Walz (D) doesn’t know when to leave well enough alone. After weeks of failed attempts to ram an “assault weapon” ban through…

View post

Anti-2A Group Blasted for Supporting Firearms Training

Reading Time: 1:55 min

Second Amendment opponents are fond of framing their objections to gun rights by claiming they actually support gun rights. They chirp that their proposals to suppress fundamental liberties are innocent…

View post

Showdown: Anti-Gunners Push Four Bills Through Pennsylvania House Committee

Reading Time: 1:55 min

As swing states go, Pennsylvania is relatively evenly divided politically in 2025. This means that Second Amendment supporters in the state government must be united to protect gun rights from…

View post

Canada’s ‘Voluntary’ Gun Buyback Amnesty Period Nears End

Reading Time: 3:28 min

Any American Second Amendment enthusiast who wonders what gun rights in the U.S. will look like if certain lawmakers get their way needs to look north for their answer. On…

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>