2A News

Appeals Court Rejects New York’s ‘Vampire Rule’

Reading Time: 3:25 min

The so-called “vampire rule” imposed by anti-gun states was never about public safety or disarming criminals. Rather, because the law required civilians in possession of weapons to ask permission from…

View post

Civil Rights Group Sues Illinois Over Orwellian Gun Law

Reading Time: 1:57 min

“Show your papers” is a familiar refrain from Cold War-era scripts, and there were many real-world instances of law-abiding citizens being forced to bend the knee for those in power.…

View post

Tennessee Woman Shoots Stranger Who Allegedly Entered Her Townhouse

Reading Time: 1:56 min

It is quite normal for a person awakened suddenly in the middle of the night to experience a moment of confusion. How they react when that confusion passes may well…

View post

Anti-Gunners Outraged Over ‘Assault Weapon’ Ban’s Failure in Minnesota

Reading Time: 1:54 min

Reasonable people can and do disagree, and the ability to have differences of opinion and not resort to violence or hateful rhetoric is one of the underpinnings of a civilized…

View post

NRA Accuses New Jersey AG of ‘Doxxing’ Gun Owners

Reading Time: 1:60 min

New Jersey officials last week took an ominous step in their attack on Glock firearms, and the National Rifle Association (NRA) quickly denounced the move as a partisan overreach that…

View post

Texas Homeowner Uses Ring Camera to Shoot Suspect

Reading Time: 2:14 min

Home security for the rank and file used to be a shotgun and a German Shepherd. Times have changed, and while these two choices remain good ones, modern technology has…

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>