Right to Carry

Special Session to ‘Address Violent Crime’ Looms in New Mexico

Reading Time: 3:40 min

A special session to “address violent crime” looms in New Mexico as Governor Michelle Lujan Grisham (D) prepares to push forward a controversial agenda that critics argue is more about…

View post

Church Shooting Suspect Run Over by Deacon Before Being Killed by Security Guard

Reading Time: 2:59 min

A church shooting suspect was run over by a deacon before being killed by a security guard in a shocking yet heroic confrontation at CrossPointe Community Church in Wayne, Michigan.…

View post

Alleged Gas Station Attack Leads to Self-Defense Shooting

Reading Time: 2:58 min

An alleged gas station attack leads to self-defense shooting in Citronelle, Alabama, after a late-night altercation turned violent outside a local convenience store. The incident, which occurred around 11 p.m.…

View post

Man Pays Ultimate Price for Allegedly Targeting Off-Duty Officer’s Property

Reading Time: 3:21 min

Man Pays Ultimate Price for Allegedly Targeting Off-Duty Officer’s Property is the latest reminder that not all potential victims are defenseless. This time, the fatal mistake occurred in North Texas…

View post

Texas Woman Cleared of Murder Charges in Self-Defense Shooting of Estranged Partner

Reading Time: 3:37 min

Texas Woman Cleared of Murder Charges in Self-Defense Shooting of Estranged Partner has drawn national attention for highlighting the tragic intersection of domestic violence and the right to self-defense. This…

View post

Constitutional Carry in NC: So Close Yet So Far

Reading Time: 3:10 min

Constitutional Carry in NC: So Close Yet So Far became the story of the week as North Carolina lawmakers advanced a major pro-Second Amendment bill—only to see it face a…

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>