2A News

AI Firearm Detection System Under Fire After Baltimore Student Held at Gunpoint

Reading Time: 2:3 min

As school safety is increasingly on the front burner, some systems are installing new AI firearm detection systems to ward off possible threats. Suffice it to say, the bugs are…

View post

Alleged California Burglar Learns Hard Lesson Delivered by Armed Citizen

Reading Time: 1:52 min

There’s an old saying in which a person with nerves of steel is described as having “the guts of a burglar.” However, as more Americans arm themselves to protect their…

View post

South Carolina’s ‘Stand Your Ground’ Law Protects Another Potential Victim

Reading Time: 1:56 min

There is something profoundly fundamental about the right to self-defense. Anyone who does not believe that all law-abiding citizens have the freedom to use whatever force is necessary to protect…

View post

NRA Responds to Government Brief Before SCOTUS Concerning SBRs

Reading Time: 1:56 min

The National Rifle Association (NRA), the nation’s oldest and largest gun rights advocacy organization, filed a critical brief Thursday through its Institute for Legislative Action (ILA). The Reply Brief concerned…

View post

NSSF Warns Gun Rights Community About ‘Ideological Gatekeeping’ by Crypto Firm

Reading Time: 2:2 min

The National Shooting Sports Foundation (NSSF) is on the front lines protecting Second Amendment rights, and the industry trade group just released a warning concerning a powerful new economic frontier.…

View post

Minnesota’s Anti-Gunners Plan to Barnstorm the State as Controversy Swirls

Reading Time: 3:46 min

Minnesota’s gun owners are under siege. Anti-Second Amendment political forces plan to barnstorm the state in a flurry of dramatic town hall meetings aimed at drumming up support for yet…

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>