2A News

California Sues Coding Firms in Unique First and Second Amendment Showdown

Reading Time: 1:50 min

Gatalog and CTRLPew LLC. are companies that specialize in ultra-modern digital designs for legal firearms and accessories. Their products are enjoyed by Second Amendment enthusiasts nationwide, but maybe not for…

View post

NH Lawmakers Move to End Carry Prohibition on College Campuses

Reading Time: 1:56 min

One of the ironies of the Second Amendment is that gun rights opponents think nothing of creating artificial “gun-free” zones that are wide open for violent criminals. Thankfully for New…

View post

Virginia Lawmakers Ram Gun Control Package Through House

Reading Time: 2:1 min

When anti-gunners promise to strip Second Amendment rights if they are given power, we should believe them. The Virginia House of Delegates carried out several campaign promises made to gun…

View post

JPMorgan Chase Announces End of Discrimination Against Firearm Industry

Reading Time: 1:52 min

Second Amendment-related companies will no longer be subjected to blatantly discriminatory practices from a Wall Street financial giant that previously denied services to the sector. JPMorgan Chase joined a recent…

View post

California Anti-Gunners Push Mandatory Live-Fire Training for Buyers

Reading Time: 1:52 min

Keeping up with California’s latest infringements on the right to keep and bear arms is a full-time job. You’d think Golden State lawmakers would have more to do with their…

View post

ATF Director Nominee Sails Through Senate Hearing

Reading Time: 3:28 min

Robert Cekada’s nomination to head the Bureau of Alcohol, Tobacco, Firearms, and Explosives (ATF) encountered little resistance last week as he sailed through his Senate examination. Despite ongoing and pitched…

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>