Skip to content

Commit 5fc2a83

Browse files
authored
Merge pull request #55 from summernote/update-range-utility
update range utility
2 parents 2db7b18 + 8b53a61 commit 5fc2a83

File tree

1 file changed

+215
-0
lines changed

1 file changed

+215
-0
lines changed

01-deep-dive.md

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,221 @@ var HTMLstring = '<div><p>Hello, world</p><p>Summernote can insert HTML string</
574574
$('#summernote').summernote('pasteHTML', HTMLstring);
575575
{% endhighlight %}
576576

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+
577792
## Callbacks
578793
Summernote support initialize callbacks and jquery's custom event style callbacks.
579794

0 commit comments

Comments
 (0)