51 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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;
 |