hunk.code_window:     }
       isLinkImage(link) {
           for (let i = 0; i < Constants.IMAGE_TYPES.length; i++) {
               const imageType = Constants.IMAGE_TYPES[i];
               const suffix = link.substring(link.length - (imageType.length + 1));
               if (suffix === '.' + imageType || suffix === '=' + imageType) {
                   return true;
               }
           }
           return false;
  
hunk.labels: keep keep keep replace replace replace replace replace replace keep keep keep
hunk.after_edit:         const regex = /.+\/(.+\.(?:jpg|gif|bmp|png|jpeg))(?:\?.*)?$/i;
           const match = link.match(regex);
           if (match && match[1]) {
               return true;
  
hunk.file_path: webapp/components/post_view/components/post_body_additional_content.jsx
hunk.type: replace
file: // Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
  // See License.txt for license information.
  
  package model
  
  import (
  	"encoding/json"
  	"io"
  	"strings"
  )
  
  const (
  	CHANNEL_NOTIFY_DEFAULT      = "default"
  	CHANNEL_NOTIFY_ALL          = "all"
  	CHANNEL_NOTIFY_MENTION      = "mention"
  	CHANNEL_NOTIFY_NONE         = "none"
  	CHANNEL_MARK_UNREAD_ALL     = "all"
  	CHANNEL_MARK_UNREAD_MENTION = "mention"
  )
  
  type ChannelUnread struct {
  	TeamId        string
  	TotalMsgCount int64
  	MsgCount      int64
  	MentionCount  int64
  	NotifyProps   StringMap
  }
  
  type ChannelMember struct {
  	ChannelId    string    `json:"channel_id"`
  	UserId       string    `json:"user_id"`
  	Roles        string    `json:"roles"`
  	LastViewedAt int64     `json:"last_viewed_at"`
  	MsgCount     int64     `json:"msg_count"`
  	MentionCount int64     `json:"mention_count"`
  	NotifyProps  StringMap `json:"notify_props"`
  	LastUpdateAt int64     `json:"last_update_at"`
  }
  
  type ChannelMembers []ChannelMember
  
  func (o *ChannelMembers) ToJson() string {
  	if b, err := json.Marshal(o); err != nil {
  		return "[]"
  	} else {
  		return string(b)
  	}
  }
  
  func ChannelMembersFromJson(data io.Reader) *ChannelMembers {
  	decoder := json.NewDecoder(data)
  	var o ChannelMembers
  	err := decoder.Decode(&o)
  	if err == nil {
  		return &o
  	} else {
  		return nil
  	}
  }
  
  func (o *ChannelMember) ToJson() string {
  	b, err := json.Marshal(o)
  	if err != nil {
  		return ""
  	} else {
  		return string(b)
  	}
  }
  
  func ChannelMemberFromJson(data io.Reader) *ChannelMember {
  	decoder := json.NewDecoder(data)
  	var o ChannelMember
  	err := decoder.Decode(&o)
  	if err == nil {
  		return &o
  	} else {
  		return nil
  	}
  }
  
  func (o *ChannelMember) IsValid() *AppError {
  
  	if len(o.ChannelId) != 26 {
  		return NewLocAppError("ChannelMember.IsValid", "model.channel_member.is_valid.channel_id.app_error", nil, "")
  	}
  
  	if len(o.UserId) != 26 {
  		return NewLocAppError("ChannelMember.IsValid", "model.channel_member.is_valid.user_id.app_error", nil, "")
  	}
  
  	notifyLevel := o.NotifyProps["desktop"]
  	if len(notifyLevel) > 20 || !IsChannelNotifyLevelValid(notifyLevel) {
  		return NewLocAppError("ChannelMember.IsValid", "model.channel_member.is_valid.notify_level.app_error",
  			nil, "notify_level="+notifyLevel)
  	}
  
  	markUnreadLevel := o.NotifyProps["mark_unread"]
  	if len(markUnreadLevel) > 20 || !IsChannelMarkUnreadLevelValid(markUnreadLevel) {
  		return NewLocAppError("ChannelMember.IsValid", "model.channel_member.is_valid.unread_level.app_error",
  			nil, "mark_unread_level="+markUnreadLevel)
  	}
  
  	return nil
  }
  
  func (o *ChannelMember) PreSave() {
  	o.LastUpdateAt = GetMillis()
  }
  
  func (o *ChannelMember) PreUpdate() {
  	o.LastUpdateAt = GetMillis()
  }
  
  func (o *ChannelMember) GetRoles() []string {
  	return strings.Fields(o.Roles)
  }
  
  func IsChannelNotifyLevelValid(notifyLevel string) bool {
  	return notifyLevel == CHANNEL_NOTIFY_DEFAULT ||
  		notifyLevel == CHANNEL_NOTIFY_ALL ||
  		notifyLevel == CHANNEL_NOTIFY_MENTION ||
  		notifyLevel == CHANNEL_NOTIFY_NONE
  }
  
  func IsChannelMarkUnreadLevelValid(markUnreadLevel string) bool {
  	return markUnreadLevel == CHANNEL_MARK_UNREAD_ALL || markUnreadLevel == CHANNEL_MARK_UNREAD_MENTION
  }
  
  func GetDefaultChannelNotifyProps() StringMap {
  	return StringMap{
  		"desktop":     CHANNEL_NOTIFY_DEFAULT,
  		"mark_unread": CHANNEL_MARK_UNREAD_ALL,
  	}
  }
  