Right to Carry

NSSF Celebrates Appointment of Robert Cekada as ATF Deputy Director

Reading Time: 2:26 min

The Bureau of Alcohol, Tobacco, Firearms and Explosives (ATF) has a new deputy director as the long-overdue overhaul of the embattled agency continues. The National Shooting Sports Foundation (NSSF) celebrated…

View post

California Judge Rules Against Company Producing Machines to Create 3D Printable Guns

Reading Time: 2:25 min

A federal judge in San Diego sided with California in its lawsuit against a Texas company that manufactures machines to enable hobbyists to produce their own weapons at home.  With…

View post

Bill to Erase Texas State Fair Concealed Carry Ban Clears First Hurdle

Reading Time: 2:23 min

Of all the pro-Second Amendment states in the Union, many were shocked when a major Texas entity brought the hammer down on lawful concealed carry holders. The Texas State Fair…

View post

Florida Homeowner Uses Firearm to Defend Against Two Alleged Home Invaders

Reading Time: 2:23 min

The idea of a home invasion was something rarely thought of in decades past. There were the run-of-the-mill burglars, of course, but the horrifying breach of what should be a…

View post

DOJ Second Amendment Task Force Sends Strong Signal of Support for Gun Rights

Reading Time: 2:19 min

Gun rights advocates cautiously celebrated the recent announcement by Attorney General Pam Bondi of the creation of the Second Amendment Enforcement Task Force. After all, promises made and promises kept…

View post

Montana Hunter Uses Rifle to Save Himself From Charging Grizzly Bear

Reading Time: 2:23 min

A Montana man is thankful to be alive today after a frightening confrontation last week, and this time the incident did not involve a violent criminal bent on destruction. Instead,…

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>