2A News

Senate Confirms Robert Cekada as New ATF Director

Reading Time: 1:60 min

There’s a new sheriff in town at the Bureau of Alcohol, Tobacco, Firearms, and Explosives (ATF), and it’s a familiar face. On Wednesday, the U.S. Senate confirmed Robert Cekada to…

View post

DOJ Announces Rollback of Several Biden-Era Firearm Regulations

Reading Time: 3:28 min

Acting Attorney General Todd Blanche announced on Wednesday a “landmark rulemaking package” designed to neuter multiple Biden-era firearm regulations. First reported by Breitbart News, the proclamation is a welcome step…

View post

Washington Resident Fires on Armed Home Invasion Suspects

Reading Time: 1:55 min

A Washington state family is fortunate today that one of its members, a 24-year-old male, had a ready firearm to respond to multiple suspects allegedly forcing their way into the…

View post

GOA Warns Government Hoarding Gun Owners’ Personal Data

Reading Time: 1:53 min

The federal government is neck-deep in the information business, and business is booming. That’s the warning from Gun Owners of America (GOA) concerning the troubling acquisition of data troves by…

View post

NRA: Virginia Gun Shops See Spike in Firearm Sales

Reading Time: 2:13 min

As Virginia’s undeclared war on the Second Amendment advances, residents continue to prove their dedication to the right to keep and bear arms. The National Rifle Association (NRA) reported that…

View post

Investigative Journalist’s Firearms Seized, Then Returned

Reading Time: 1:57 min

Supporters of Extreme Risk Protection Orders (ERPOs) contend that these mechanisms are in place to safeguard innocent people from those who would bring them harm. While that is true in…

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>