You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							57 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							57 lines
						
					
					
						
							1.2 KiB
						
					
					
				import Parchment from 'parchment'; | 
						|
import { sanitize } from '../formats/link'; | 
						|
 | 
						|
const ATTRIBUTES = [ | 
						|
  'alt', | 
						|
  'height', | 
						|
  'width' | 
						|
]; | 
						|
 | 
						|
 | 
						|
class Image extends Parchment.Embed { | 
						|
  static create(value) { | 
						|
    let node = super.create(value); | 
						|
    if (typeof value === 'string') { | 
						|
      node.setAttribute('src', this.sanitize(value)); | 
						|
    } | 
						|
    return node; | 
						|
  } | 
						|
 | 
						|
  static formats(domNode) { | 
						|
    return ATTRIBUTES.reduce(function(formats, attribute) { | 
						|
      if (domNode.hasAttribute(attribute)) { | 
						|
        formats[attribute] = domNode.getAttribute(attribute); | 
						|
      } | 
						|
      return formats; | 
						|
    }, {}); | 
						|
  } | 
						|
 | 
						|
  static match(url) { | 
						|
    return /\.(jpe?g|gif|png)$/.test(url) || /^data:image\/.+;base64/.test(url); | 
						|
  } | 
						|
 | 
						|
  static sanitize(url) { | 
						|
    return sanitize(url, ['http', 'https', 'data']) ? url : '//:0'; | 
						|
  } | 
						|
 | 
						|
  static value(domNode) { | 
						|
    return domNode.getAttribute('src'); | 
						|
  } | 
						|
 | 
						|
  format(name, value) { | 
						|
    if (ATTRIBUTES.indexOf(name) > -1) { | 
						|
      if (value) { | 
						|
        this.domNode.setAttribute(name, value); | 
						|
      } else { | 
						|
        this.domNode.removeAttribute(name); | 
						|
      } | 
						|
    } else { | 
						|
      super.format(name, value); | 
						|
    } | 
						|
  } | 
						|
} | 
						|
Image.blotName = 'image'; | 
						|
Image.tagName = 'IMG'; | 
						|
 | 
						|
 | 
						|
export default Image;
 | 
						|
 |