@@ -574,6 +574,221 @@ var HTMLstring = '<div><p>Hello, world</p><p>Summernote can insert HTML string</
574
574
$('#summernote').summernote('pasteHTML', HTMLstring);
575
575
{% endhighlight %}
576
576
577
+ ## Range & Selection API
578
+
579
+ ### saveRange
580
+ refer to [ #saveRange] ( #saverange-restorerange )
581
+
582
+ ### restoreRange
583
+ refer to [ #restorerange] ( #saverange-restorerange )
584
+
585
+ ### getLastRange
586
+ summernote is saving a range object(WrappedRange) on current cursor.
587
+
588
+ {% highlight javascript %}
589
+ const rng = $('#summernote').summernote('editor.getLastRange');
590
+ {% endhighlight %}
591
+
592
+ > #### when summernote save a range with dom event
593
+ > * keydown
594
+ > * keyup
595
+ > * focus
596
+ > * mouseup
597
+ > * paste
598
+
599
+ > #### when summernote save a range with api
600
+ > * ` editor.insertImage ` -> Image
601
+ > * ` editor.insertNode ` -> Node
602
+ > * ` editor.insertText ` -> TextNode
603
+ > * ` editor.pasteHTML ` -> last Node of contents
604
+ > * ` editor.insertHorizontalRule ` -> next sibling node of hr node
605
+ > * ` editor.createLink ` -> link node
606
+
607
+ ### setLastRange
608
+
609
+ You can define custom range in node of summernote editable element.
610
+
611
+ {% highlight javascript %}
612
+ const range = $.summernote.range; // range utility
613
+ // set my custom range
614
+ $('#summernote').summernote('editor.setLastRange', range.createFromNodeAfter(node).select());
615
+ {% endhighlight %}
616
+
617
+ ### ` range ` utility
618
+
619
+ {% highlight javascript %}
620
+ const range = $.summernote.range; // range utility
621
+ {% endhighlight %}
622
+
623
+
624
+ #### create WrappedRange Object
625
+
626
+ range utility make a WrappedRange Class's instance
627
+
628
+ ##### create
629
+
630
+ create WrappedRange Object From arguments or Browser Selection
631
+
632
+ {% highlight javascript %}
633
+ const rng = range.create(startContainer, startOffset, endContainer, endOffset)
634
+
635
+ // or
636
+
637
+ const rng = range.create() // is equals range.createFromSelection()
638
+
639
+ {% endhighlight %}
640
+
641
+
642
+ ##### createFromNode
643
+
644
+ create WrappedRange object from node
645
+
646
+ {% highlight javascript %}
647
+ const rng = range.createFromNode(node)
648
+ {% endhighlight %}
649
+
650
+ ##### createFromNodeBefore
651
+
652
+ create WrappedRange from node before position
653
+
654
+ {% highlight javascript %}
655
+ const rng = range.createFromNodeBefore(node)
656
+ {% endhighlight %}
657
+
658
+ ##### createFromNodeAfter
659
+
660
+ create WrappedRange from node after position
661
+
662
+ {% highlight javascript %}
663
+ const rng = range.createFromNodeAfter(node)
664
+ {% endhighlight %}
665
+
666
+
667
+ ##### createFromSelection
668
+
669
+ create WrappedRange object from selection
670
+
671
+ {% highlight javascript %}
672
+ const rng = range.createFromSelection(node)
673
+ {% endhighlight %}
674
+
675
+
676
+ #### WrappedRange Object
677
+
678
+ ##### select()
679
+
680
+ select update visible range
681
+
682
+ ```
683
+ rng.select()
684
+ ```
685
+
686
+ ##### collapse(isCollapseToStart)
687
+
688
+ ```
689
+ const newRng = rng.collapse(true); // to start rng
690
+
691
+ or
692
+
693
+ const newRng = rng.collapse(); // to end rng
694
+ ```
695
+
696
+ ##### splitText()
697
+
698
+ splitText on range
699
+
700
+ ```
701
+ const textRng = rng.splitText()
702
+ ```
703
+
704
+
705
+ ##### deleteContents()
706
+
707
+ delete contents on range
708
+
709
+ ```
710
+ const newRng = rng.deleteContents()
711
+ ```
712
+
713
+
714
+ ##### isCollapsed()
715
+
716
+ returns whether range was collapsed or not
717
+
718
+ ```
719
+ const isCollapsed = rng.isCollapsed()
720
+ ```
721
+
722
+
723
+ ##### wrapBodyInlineWithPara()
724
+
725
+ wrap inline nodes which children of body with paragraph
726
+
727
+ ```
728
+ const newRng = rng.wrapBodyInlineWithPara()
729
+ ```
730
+
731
+ ##### insertNode(node)
732
+
733
+ insert node at current cursor
734
+
735
+ ```
736
+ const node = rng.insertNode(document.createElement('div'))
737
+ ```
738
+
739
+
740
+ ##### pasteHTML(markup)
741
+
742
+ insert html at current cursor
743
+
744
+ ```
745
+ const nodes = rng.pasteHTML(`<div>summernote</div>`)
746
+ ```
747
+
748
+
749
+ ##### toString()
750
+
751
+ returns text in range
752
+
753
+
754
+ ##### getWordRange(findAfter)
755
+
756
+ returns range for word before(or after) cursor
757
+
758
+ ```
759
+ const newRng = rng.getWordRange(); // before cursor
760
+
761
+ // or
762
+
763
+ const newRng = rng.getWordRange(true); // after cursor
764
+ ```
765
+
766
+ ##### getWordsMatchRange(regex)
767
+
768
+ returns range for words before cursor that match with a Regex
769
+
770
+ ```
771
+ // range : 'hi @Peter Pan'
772
+ const rng = range.create() // or $('.summernote').summernote('getLastRange');
773
+
774
+ const newRng = rng.getWordsMatchRange(/@[a-z ]+/i)
775
+
776
+ console.log(newRng.toString()) // '@Peter Pan'
777
+ ```
778
+
779
+
780
+ ##### getClientRects()
781
+
782
+ returns a list of DOMRect objects representing the area of the screen occupied by the range.
783
+
784
+ > ###### Range.getClientRects()
785
+ > https://developer.mozilla.org/en-US/docs/Web/API/Range/getClientRects
786
+
787
+
788
+
789
+
790
+
791
+
577
792
## Callbacks
578
793
Summernote support initialize callbacks and jquery's custom event style callbacks.
579
794
0 commit comments