| 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; |