2A News

Giffords Spending Millions to Oppose 2A Supporters

Reading Time: 2:23 min

It’s still hot in most of the country, but the fall political season ahead of November’s pivotal midterm elections is well underway. Anti-gunners just fired the first shot across the…

View post

Virginia AG Announces New Unit to Target Firearms Manufacturers, Dealers

Reading Time: 1:53 min

Virginia’s leadership already suppresses Second Amendment activities as a matter of policy. On Tuesday, officials announced a specialized team within Attorney General Jay Jones’ office to take the oppression of…

View post

California Homeowner Shoots Parolee During Alleged Home Invasion

Reading Time: 2:1 min

With the revolving door system of justice practiced by so many in the judicial system, it is not surprising when violent criminals released on parole or probation strike innocent civilians.…

View post

Illinois CCL Holder Shoots Alleged Robber While Pumping Gas

Reading Time: 2:7 min

Everyday activities such as using an ATM or pumping gas may expose a person to danger, but if that individual is armed, the situation can instantly flip. That’s apparently the…

View post

GOA Sues Oregon City and County Over Disarming Nonresidents

Reading Time: 2:12 min

National reciprocity is an idea whose time has come. It is unconscionable that the Second Amendment right to protect oneself and loved ones evaporates merely by crossing a state line.…

View post

San Jose Officials Warned Over Outrageous Carry Permit Fees

Reading Time: 2:1 min

Second Amendment rights often come with a state-mandated price tag, which should upset freedom-loving Americans. When that financial hurdle makes their free exercise nearly impossible for rank-and-file citizens, it is…

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>