2A News

Victory: Cryptocurrency Provider Ends Discrimination Against 2A Transactions

Reading Time: 2:3 min

There are many instances in which misguided or outright discriminatory practices need only be exposed to the light of day to be finally ended. It is good to recognize when…

View post

Virginia’s 2A Community Can Expect a Fight After Tuesday’s Elections

Reading Time: 1:55 min

When Second Amendment opponents wake up celebrating the morning after an election, that is never a good sign for those who treasure constitutional rights. In Virginia, it’s a warning.  Voters…

View post

Controversial ‘Red Flag’ Law to Take Effect in Maine After Tuesday Vote

Reading Time: 1:52 min

Tuesday’s election results included a hotly contested decision by Maine voters to approve a sweeping “red flag” law that allows the confiscation of firearms with minimal, if any due process.…

View post

Radical 2A Opponents Target Ruger After Glock Announcement

Reading Time: 1:59 min

Gun control radicals score the occasional legal victory despite the best efforts of Second Amendment organizations—and the Constitution. When this unfortunate scenario materializes, these anti-gunners seek to build on their…

View post

NRA: DOJ Slashes Millions in Grants for Second Amendment Opponents

Reading Time: 1:53 min

Reasonable people would agree that using government (taxpayer) funds to prop up organizations opposed to constitutional rights is sheer folly. Unfortunately, Second Amendment supporters had to deal with this travesty…

View post

Off-Duty Texas Deputy with Child in Vehicle Shoots and Kills Alleged Carjacker

Reading Time: 1:53 min

It is a risky thing, being a violent criminal and choosing your target in 2025. Tens of millions of Americans are now legally armed, and justifiable self-defense instances are on…

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>