2A News

NJ Gun Permit Regime Sued Over Racial Disparities

Reading Time: 1:57 min

It’s bad enough for a government entity to suppress constitutionally guaranteed Second Amendment rights. Somehow, New Jersey officials allegedly found a way to make their actions worse. According to the…

View post

Missouri’s Resurrected Second Amendment Protection Act Dies in Committee

Reading Time: 1:52 min

A valiant effort by Missouri lawmakers to reinforce gun rights for its citizens was brushed aside last week when a legislative committee overwhelmingly voted to kill it. The tally in…

View post

Anti-2A Louisville Lawmakers Seek End to State Preemption

Reading Time: 1:55 min

Like petulant children, many city leaders in 2026 resent being bound by the Second Amendment and, in many instances, by state law, from infringing on the right to keep and…

View post

Memphis Homeowner Shoots Alleged Female Intruder

Reading Time: 1:53 min

The period before sunrise is when many Americans start to stir and prepare for the new day. What it typically isn’t is a reason to be on high alert and…

View post

Canada Prepares for Door-to-Door Gun Confiscation

Reading Time: 1:51 min

With the completely arbitrary drop-dead date of March 31 looming for Canada’s owners of banned firearms, officials are not even trying to hide the next step in the confiscation scheme.…

View post

Hawaii Defends Bizarre Gun Regulations Before Ninth Circuit

Reading Time: 1:59 min

It is not hyperbole to recognize the endgame for most radical anti-gunners. They want to burden the Second Amendment with every conceivable infringement enough to make the people throw up…

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>