mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-04 13:07:55 +00:00 
			
		
		
		
	* chore: Use markdown-it instead of marked * Adds styling for markdown rendered content * fixes codeclimate issue * Fixes blockquote styles for widget in darkmode * fix: issue block quote color issue in light mode * fix: issue block quote color issue in light mode * Fixes blockquote color in dark mode * Remove usage of dark mode mixin in user bubble * chore: code clean up --------- Co-authored-by: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Co-authored-by: iamsivin <iamsivin@gmail.com>
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import mila from 'markdown-it-link-attributes';
 | 
						|
import mentionPlugin from './markdownIt/link';
 | 
						|
const md = require('markdown-it')({
 | 
						|
  html: false,
 | 
						|
  xhtmlOut: true,
 | 
						|
  breaks: true,
 | 
						|
  langPrefix: 'language-',
 | 
						|
  linkify: true,
 | 
						|
  typographer: true,
 | 
						|
  quotes: '\u201c\u201d\u2018\u2019',
 | 
						|
  maxNesting: 20,
 | 
						|
})
 | 
						|
  .use(mentionPlugin)
 | 
						|
  .use(mila, {
 | 
						|
    attrs: {
 | 
						|
      class: 'link',
 | 
						|
      rel: 'noreferrer noopener nofollow',
 | 
						|
      target: '_blank',
 | 
						|
    },
 | 
						|
  });
 | 
						|
 | 
						|
const TWITTER_USERNAME_REGEX = /(^|[^@\w])@(\w{1,15})\b/g;
 | 
						|
const TWITTER_USERNAME_REPLACEMENT = '$1[@$2](http://twitter.com/$2)';
 | 
						|
const TWITTER_HASH_REGEX = /(^|\s)#(\w+)/g;
 | 
						|
const TWITTER_HASH_REPLACEMENT = '$1[#$2](https://twitter.com/hashtag/$2)';
 | 
						|
 | 
						|
class MessageFormatter {
 | 
						|
  constructor(message, isATweet = false, isAPrivateNote = false) {
 | 
						|
    this.message = message || '';
 | 
						|
    this.isAPrivateNote = isAPrivateNote;
 | 
						|
    this.isATweet = isATweet;
 | 
						|
  }
 | 
						|
 | 
						|
  formatMessage() {
 | 
						|
    let updatedMessage = this.message;
 | 
						|
    if (this.isATweet && !this.isAPrivateNote) {
 | 
						|
      updatedMessage = updatedMessage.replace(
 | 
						|
        TWITTER_USERNAME_REGEX,
 | 
						|
        TWITTER_USERNAME_REPLACEMENT
 | 
						|
      );
 | 
						|
      updatedMessage = updatedMessage.replace(
 | 
						|
        TWITTER_HASH_REGEX,
 | 
						|
        TWITTER_HASH_REPLACEMENT
 | 
						|
      );
 | 
						|
    }
 | 
						|
    return md.render(updatedMessage);
 | 
						|
  }
 | 
						|
 | 
						|
  get formattedMessage() {
 | 
						|
    return this.formatMessage();
 | 
						|
  }
 | 
						|
 | 
						|
  get plainText() {
 | 
						|
    const strippedOutHtml = new DOMParser().parseFromString(
 | 
						|
      this.formattedMessage,
 | 
						|
      'text/html'
 | 
						|
    );
 | 
						|
    return strippedOutHtml.body.textContent || '';
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export default MessageFormatter;
 |