2A News

CNN: Gun Buyback Encounters ‘Friction’ in Western Canada

Reading Time: 3:33 min

That deafening silence coming from north of the border is the sound of anti-gunners’ apparent shock that good Canadians are not sheepishly handing over their firearms to government agents in…

View post

Third Circuit: First Amendment Does Not Protect 3D-Printed Gun Files

Reading Time: 1:57 min

Second Amendment advocates have their hands full defending personal rights against regular incursions by anti-gun lawmakers. There are major victories to celebrate as well as setbacks to be addressed as…

View post

ATF Approves NFA Applications Previously Rejected for Citing ‘God-Given Rights’

Reading Time: 1:56 min

The Bureau of Alcohol, Tobacco, Firearms, and Explosives (ATF) is apparently not beyond redemption despite an adversarial relationship with the Second Amendment community in recent years. The controversial agency made…

View post

Carry Permit Applications ‘Nearly Double’ In Minnesota During Turmoil

Reading Time: 1:53 min

Minnesota residents were thrust into the national spotlight at the start of the year by immigration enforcement in the state and the ensuing social unrest along with the violence it…

View post

NSSF: Media May Purposefully Understate Number of Modern Sporting Rifles in Circulation

Reading Time: 1:56 min

It should be more difficult in the Google age to declare false data to score political points, but far too many people take the mainstream media at its word and…

View post

Hawaii County’s Gun Control Regime Sued Over Permit Delays

Reading Time: 1:53 min

The Aloha State welcomes millions of visitors every year to enjoy its pristine beaches and tropical delights. Unfortunately, it is not a welcoming environment for those who wish to freely…

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>