2A News

DOJ Carries Out Threat to Sue California and Virginia Over Gun Rights

Reading Time: 3:41 min

On June 24, Assistant Attorney General Harmeet Dhillon warned California officials that the state’s pending ban on Glock pistols and similar models was in the Department of Justice’s (DOJ) crosshairs.…

View post

U.S. Supreme Court Agrees to Hear Challenge on Assault Weapons Ban

Reading Time: 3:27 min

The U.S. Supreme Court closed its first term of 2026 on Tuesday, and nine justices are off for summer recess before returning to the bench in October. On their way…

View post

ATF Proposes Clarification of Interstate Travelers’ Gun Rights

Reading Time: 2:13 min

The Bureau of Alcohol, Tobacco, Firearms, and Explosives (ATF) proposed a rule in May to protect armed citizens from overzealous local and state officials while they travel. Through the Clarifying…

View post

NRA, GOA Score Important Victories Against Spanberger’s ‘Assault Firearm’ Ban

Reading Time: 3:57 min

The legal war against Virginia’s pending “assault firearm” ban produced two significant victories for those opposed to the state’s brazen gun grabbing. Gov. Abigail Spanberger’s (D) radical suppression of fundamental…

View post

Chicago Launches $100M Program to Fight ‘Gun Violence’

Reading Time: 2:21 min

“Gun violence” is a misnomer. Firearms are inanimate tools used by law-abiding citizens for everything from sport shooting and putting food on the table to defending loved ones and property…

View post

Attorney Blasts Hawaii’s Use of Black Codes to Defend ‘Vampire Rule’

Reading Time: 2:20 min

The U.S. Supreme Court last week eviscerated Hawaii’s so-called “vampire rule” that required private property owners to grant permission to lawful gun owners before they were allowed on the premises.…

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>