2A News

California Lawmaker Proposes Gun-Related Restrictions on 3D Printing

Reading Time: 1:53 min

If a new proposal becomes law, many 3D printers sold or transferred into California would have to feature government-authorized “firearm blocking technology.” Sponsored by Assembly Member Rebecca Bauer-Kahan (D), Assembly…

View post

New Jersey’s Rebellion Against Carry Permit Fees Spreads

Reading Time: 1:59 min

Add another New Jersey municipality to the growing roster of local governments that have declared a hard no to the state’s controversial carry permit fee scheme. West Milford is the…

View post

Minnesota’s Firearms Community Under Attack by Anti-2A Lawmakers

Reading Time: 1:57 min

Minnesota’s increasingly anti-Second Amendment political leadership stoked controversy yet again on Wednesday when they introduced a volatile new measure. SF 4290 is the latest attempt to prohibit nearly all semi-automatic…

View post

Armed Pennsylvania Man Fights Off Threat in Dead of Night 

Reading Time: 1:54 min

Imagine waking in the dead of night to the unmistakable sound of shattering glass and knowing that a bad person is probably already in your home. How long will it…

View post

Virginia Gov. Expected to Sign Slew of Controversial Gun Control Bills

Reading Time: 3:22 min

The curtain is coming down on the 2026 Virginia General Assembly’s legislative session, and it is as bad as Second Amendment advocates feared after the last election. The previous virtual…

View post

Preteen Boy Fires Handgun to Protect Mother from Alleged Attack

Reading Time: 1:56 min

Having a legal and ready firearm at your disposal may be the difference between life and death. It may also be the difference between seeing a loved one suffer at…

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>