2A News

GOA: NH Gun Owners Face a Flood of Firearm-Related Legislative Measures

Reading Time: 1:57 min

January is the month when state lawmakers nationwide roll out their proposals, and they are a mixed bag every year for law-abiding gun owners. New Hampshire is the latest prime…

View post

Virginia Anti-Gunners Seek Removal of ‘Grandfather Clause’ From Magazine Proposal

Reading Time: 1:55 min

Virginia’s substantial anti-gun rights lobby repeatedly charged into a brick wall pushing new gun control for the past few years. The reason? Former Gov. Glenn Youngkin (R) was a stalwart…

View post

ATF Interim Final Rule Redefines ‘Unlawful’ User of Controlled Substances

Reading Time: 3:47 min

The Bureau of Alcohol, Tobacco, Firearms, and Explosives (ATF) published an interim final rule (IFR) last week ahead of a potentially landmark case before the U.S. Supreme Court.  This comes…

View post

Canada’s Controversial Gun Buyback Suffers Embarrassing Setback

Reading Time: 3:23 min

Those who want to see the fruition of anti-gunners’ wildest dreams need only to peek across the northern border. Canadian officials recently embarked on a mission to confiscate hundreds of…

View post

2A Organizations Demand Investigation into ICE Shooting of Concealed Carry Permit Holder

Reading Time: 3:33 min

Controversy continues to swirl around the fatal shooting of 37-year-old nurse Alex Pretti on Saturday by a group of Immigration and Customs Enforcement (ICE) agents in Minneapolis.  The Department of…

View post

Armed Florida Man Rescues Wife From Alleged Kidnapper

Reading Time: 1:56 min

Criminals generally do not schedule appointments or announce themselves, so it is critically important to be prepared at all times. Violent crime rates are falling, and that should be celebrated,…

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>