Ty O'banner

Appeals Court Strikes Down Lifetime Firearm Ban for Non-Violent Offender

Reading Time: 2:14 min

Every responsible gun owner supports keeping firearms away from violent criminals, but what about those guilty of non-violent offenses who find themselves forever stripped of Second Amendment rights? Last month,…

View post

2A Community Cautiously Celebrates California Victory

Reading Time: 3:27 min

It’s self-defeating to be skeptical of every victory or even sliver of good news, but gun rights advocates are accustomed to tempering their expectations. So, while Friday’s ruling striking down…

View post

Rest in Peace: Hated NFA Stamp Tax Dead and Gone in 2026

Reading Time: 1:54 min

Along with raucous New Year’s celebrations and an endless deluge of football, the changing of the calendar brought a welcome update for law-abiding American gun owners. As of January 1,…

View post

Hawaii Presents Novel Argument in Supreme Court Gun Control Case

Reading Time: 1:60 min

Hawaii undoubtedly has a unique status as a U.S. state surrounded by the Pacific Ocean and the last to join the Union, and its history is rich and fascinating. Unfortunately,…

View post

NSSF Takes Stand Against Maryland’s Attack on Weapons Industry

Reading Time: 1:54 min

Established federal law protects the weapons industry from frivolous lawfare intent on bankrupting the very companies that make Second Amendment freedoms possible. The Protection of Lawful Commerce in Arms Act…

View post

Delaware’s Permit to Purchase Law and Training Requirement Take Effect

Reading Time: 1:51 min

The erosion of constitutional freedoms will not always be announced from the rooftops and confirmed on the evening news. Sometimes it’s just the passing of a predetermined date that signals…

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>