2A News

Campus Carry Legislation Advances in New Hampshire

Reading Time: 2:4 min

The Firearms Policy Coalition (FPC) recently released a fascinating look at how U.S. states comply with the Second Amendment.  This scorecard, the 2026 FPC State Freedom Index, ranked only New…

View post

NAGR Exposes Anti-Gunners’ Constitutional Carry Deceit

Reading Time: 1:55 min

Second Amendment opponents’ playbook against gun rights is as old and worn as it is predictable. Any official recognition of the right to keep and bear arms is met with…

View post

Bill Would Grant Elite Military Veterans National Concealed Carry Rights

Reading Time: 1:53 min

As Congress considers a bill to establish nationwide reciprocity for all law-abiding gun owners, a North Carolina lawmaker introduced a narrower proposal last week. Combat-decorated Green Beret and current Rep.…

View post

Spanberger Demands Legislature Make Already Bad Bills Worse

Reading Time: 1:57 min

Virginia may be a late arrival to the anti-Second Amendment party thrown by a handful of states, but it is quickly catching up with its colleagues in suppressing gun rights.…

View post

Ohio Lawmakers Strike Back at Local Gun Restrictions

Reading Time: 1:52 min

If it were not for big city mayors and other local leaders who believe they have the authority to overrule the Second Amendment, state preemption laws would be wholly unnecessary.…

View post

GOA Celebrates Victory as It Warns Congress to Protect Gun Rights

Reading Time: 3:26 min

When asked to choose between good and bad news, most people tend to prefer hearing the bad news first and moving on.  That’s the situation with Second Amendment rights and…

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>