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.
		
		
		
		
		
			
		
			
				
					
					
						
							50 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							50 lines
						
					
					
						
							1.4 KiB
						
					
					
				import Text from './text'; | 
						|
import Parchment from 'parchment'; | 
						|
 | 
						|
 | 
						|
class Inline extends Parchment.Inline { | 
						|
  static compare(self, other) { | 
						|
    let selfIndex = Inline.order.indexOf(self); | 
						|
    let otherIndex = Inline.order.indexOf(other); | 
						|
    if (selfIndex >= 0 || otherIndex >= 0) { | 
						|
      return selfIndex - otherIndex; | 
						|
    } else if (self === other) { | 
						|
      return 0; | 
						|
    } else if (self < other) { | 
						|
      return -1; | 
						|
    } else { | 
						|
      return 1; | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  formatAt(index, length, name, value) { | 
						|
    if (Inline.compare(this.statics.blotName, name) < 0 && Parchment.query(name, Parchment.Scope.BLOT)) { | 
						|
      let blot = this.isolate(index, length); | 
						|
      if (value) { | 
						|
        blot.wrap(name, value); | 
						|
      } | 
						|
    } else { | 
						|
      super.formatAt(index, length, name, value); | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  optimize(context) { | 
						|
    super.optimize(context); | 
						|
    if (this.parent instanceof Inline && | 
						|
        Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) { | 
						|
      let parent = this.parent.isolate(this.offset(), this.length()); | 
						|
      this.moveChildren(parent); | 
						|
      parent.wrap(this); | 
						|
    } | 
						|
  } | 
						|
} | 
						|
Inline.allowedChildren = [Inline, Parchment.Embed, Text]; | 
						|
// Lower index means deeper in the DOM tree, since not found (-1) is for embeds | 
						|
Inline.order = [ | 
						|
  'cursor', 'inline',   // Must be lower | 
						|
  'underline', 'strike', 'italic', 'bold', 'script', | 
						|
  'link', 'code'        // Must be higher | 
						|
]; | 
						|
 | 
						|
 | 
						|
export default Inline;
 | 
						|
 |