2A News

Separate Self-Defense Incidents Rock Philadelphia

Reading Time: 2:1 min

The City of Brotherly Love might want to start taking suggestions on a new moniker after a night of explosive violence. Two times an alleged violent criminal attempted to prey…

View post

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