2A News

Texas Homeowner Shoots Suspect Who Allegedly Shattered Door Glass

Reading Time: 1:53 min

Much is being said currently about the sad state of affairs where violent criminals escape punishment with barely a slap on the wrist. Many call for harsher sentencing to combat…

View post

RI Anti-Gunners Push Bill That Would Lead to Confiscation

Reading Time: 1:56 min

Last June, Rhode Island Gov. Dan McKee (D) signed the “State Assault Weapons Ban Act” into law. Despite the obvious constitutional objections by Second Amendment supporters, lawmakers shamelessly promised that…

View post

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