2A News

West Virginia Extends Constitutional Carry to Young Adults

Reading Time: 1:57 min

There is good news for West Virginia’s young adults as the state joined many of its colleagues this week in expanding Second Amendment rights to include this age group. On…

View post

NY Lawmakers Seek to Punish Free Exercise of Gun Rights Financially

Reading Time: 1:53 min

Politicians using tax policy to influence the public’s behavior are as old as governments themselves. What is not so common is for these leaders to use the power of the…

View post

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
<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>