summary excerpt read more readless

<script>
document.addEventListener('DOMContentLoaded', function() {
  const MAX_WORDS = 450;
  const READ_MORE_TEXT = 'Read More';
  const READ_LESS_TEXT = 'Read Less';
  
  const excerpts = document.querySelectorAll('.summary-excerpt.summary-excerpt-only');
  
  function truncateContent() {
    excerpts.forEach(excerpt => {
      if (excerpt.dataset.processed) return;
      
      const originalContent = excerpt.innerHTML;
      excerpt.dataset.originalContent = originalContent;
      
      let allText = '';
      const paragraphs = excerpt.querySelectorAll('p');
      paragraphs.forEach(p => {
        allText += p.textContent.trim() + ' ';
      });
      
      const words = allText.trim().split(/\s+/);
      
      if (words.length > MAX_WORDS) {
        const truncatedWords = words.slice(0, MAX_WORDS);
        const truncatedText = truncatedWords.join(' ');
        
        const truncatedP = document.createElement('p');
        truncatedP.className = 'tp-truncated-text';
        truncatedP.innerHTML = truncatedText + '... ';
        
        const readMoreSpan = document.createElement('span');
        readMoreSpan.className = 'tp-read-more';
        readMoreSpan.textContent = READ_MORE_TEXT;
        
        truncatedP.appendChild(readMoreSpan);
        
        excerpt.innerHTML = '';
        excerpt.appendChild(truncatedP);
        
        readMoreSpan.addEventListener('click', function(e) {
          e.preventDefault();
          expandContent(excerpt);
        });
        
        excerpt.dataset.processed = 'true';
      }
    });
  }
  
  function expandContent(excerpt) {
    if (excerpt.dataset.originalContent) {
      excerpt.innerHTML = excerpt.dataset.originalContent;
      
      const readLessSpan = document.createElement('span');
      readLessSpan.className = 'tp-read-less';
      readLessSpan.textContent = READ_LESS_TEXT;
      
      excerpt.appendChild(readLessSpan);
      
      readLessSpan.addEventListener('click', function(e) {
        e.preventDefault();
        collapseContent(excerpt);
      });
    }
  }
  
  function collapseContent(excerpt) {
    excerpt.dataset.processed = 'false';
    truncateContent();
  }
  
  truncateContent();
  
  window.addEventListener('mercury:load', function() {
    setTimeout(truncateContent, 100);
  });
});
</script>
<style>
.tp-read-more,
.tp-read-less {
  text-decoration: underline;
  cursor: pointer;
  font-size: 13px;
}

.tp-read-more:hover,
.tp-read-less:hover {
  opacity: 0.8;
}
.tp-read-less {
  display: block;
}

.tp-truncated-text {
  white-space: pre-wrap;
}
</style>

 

Buy me a coffee