Ty O'banner

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

SCOTUS To Decide Whether to Hear Case Over California’s Standard Capacity Magazine Ban

Reading Time: 1:53 min

The long and winding road of the ferocious battle over California’s ban on standard capacity magazines is finally before the U.S. Supreme Court. On Friday, November 21, justices are scheduled…

View post

NSSF Praises Utah’s New Firearm Safety Program for Schools

Reading Time: 1:56 min

In a political climate where anti-gunners want to eradicate the right to keep and bear arms, it is encouraging to see U.S. states that forcefully push back on this encroachment.…

View post

Judge: Savannah’s Prohibition of Guns in Unlocked Vehicles ‘Unenforceable’

Reading Time: 1:56 min

Savannah, Georgia, is a coastal tourist destination that also grapples with more than its fair share of violent crime. Sadly, city officials continue to pursue failed gun control policies that…

View post

St. Paul Mayor Admits New ‘Assault Weapons’ Ban Cannot be Enforced

Reading Time: 3:31 min

Political posturing is as old as politics itself, but modern-day anti-gunners are busy making it into an art form. Despite the utter futility of toothless restrictions on Second Amendment rights,…

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>