Class: Dommy::Selection
- Inherits:
-
Object
- Object
- Dommy::Selection
- Includes:
- Bridge::Methods
- Defined in:
- lib/dommy/range.rb
Overview
Selection — represents user-selected ranges in the document.
Always at most one range in Dommy's stub implementation
(matching common browser behavior).
Instance Method Summary collapse
- #__js_call__(method, args) ⇒ Object
- #__js_get__(key) ⇒ Object
- #add_range(range) ⇒ Object
- #anchor_node ⇒ Object
- #anchor_offset ⇒ Object
- #collapse(node, offset = 0) ⇒ Object
- #empty ⇒ Object
- #focus_node ⇒ Object
- #focus_offset ⇒ Object
- #get_range_at(index) ⇒ Object
-
#initialize(document) ⇒ Selection
constructor
A new instance of Selection.
- #is_collapsed ⇒ Object (also: #isCollapsed)
- #range_count ⇒ Object
- #remove_all_ranges ⇒ Object
- #remove_range(range) ⇒ Object
- #select_all_children(node) ⇒ Object
- #to_s ⇒ Object
Methods included from Bridge::Methods
Constructor Details
#initialize(document) ⇒ Selection
Returns a new instance of Selection.
699 700 701 702 |
# File 'lib/dommy/range.rb', line 699 def initialize(document) @document = document @ranges = [] end |
Instance Method Details
#__js_call__(method, args) ⇒ Object
799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 |
# File 'lib/dommy/range.rb', line 799 def __js_call__(method, args) case method when "getRangeAt" get_range_at(args[0]) when "addRange" add_range(args[0]) when "removeRange" remove_range(args[0]) when "removeAllRanges" remove_all_ranges when "empty" empty when "collapse" collapse(args[0], args[1] || 0) when "selectAllChildren" select_all_children(args[0]) when "toString" to_s end end |
#__js_get__(key) ⇒ Object
774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 |
# File 'lib/dommy/range.rb', line 774 def __js_get__(key) case key when "rangeCount" range_count when "anchorNode" anchor_node when "anchorOffset" anchor_offset when "focusNode" focus_node when "focusOffset" focus_offset when "isCollapsed" is_collapsed when "type" is_collapsed ? "Caret" : "Range" else Bridge::ABSENT end end |
#add_range(range) ⇒ Object
712 713 714 715 716 717 |
# File 'lib/dommy/range.rb', line 712 def add_range(range) # Spec says modern browsers ignore add_range if a range already # exists; we keep the behavior simple and replace. @ranges = [range] nil end |
#anchor_node ⇒ Object
752 753 754 |
# File 'lib/dommy/range.rb', line 752 def anchor_node @ranges.first&.start_container end |
#anchor_offset ⇒ Object
756 757 758 |
# File 'lib/dommy/range.rb', line 756 def anchor_offset @ranges.first&.start_offset || 0 end |
#collapse(node, offset = 0) ⇒ Object
733 734 735 736 737 738 739 |
# File 'lib/dommy/range.rb', line 733 def collapse(node, offset = 0) range = Range.new(@document) range.set_start(node, offset) range.set_end(node, offset) add_range(range) nil end |
#empty ⇒ Object
729 730 731 |
# File 'lib/dommy/range.rb', line 729 def empty remove_all_ranges end |
#focus_node ⇒ Object
760 761 762 |
# File 'lib/dommy/range.rb', line 760 def focus_node @ranges.first&.end_container end |
#focus_offset ⇒ Object
764 765 766 |
# File 'lib/dommy/range.rb', line 764 def focus_offset @ranges.first&.end_offset || 0 end |
#get_range_at(index) ⇒ Object
708 709 710 |
# File 'lib/dommy/range.rb', line 708 def get_range_at(index) @ranges[index.to_i] end |
#is_collapsed ⇒ Object Also known as: isCollapsed
768 769 770 |
# File 'lib/dommy/range.rb', line 768 def is_collapsed @ranges.empty? || @ranges.first.collapsed? end |
#range_count ⇒ Object
704 705 706 |
# File 'lib/dommy/range.rb', line 704 def range_count @ranges.length end |
#remove_all_ranges ⇒ Object
724 725 726 727 |
# File 'lib/dommy/range.rb', line 724 def remove_all_ranges @ranges.clear nil end |
#remove_range(range) ⇒ Object
719 720 721 722 |
# File 'lib/dommy/range.rb', line 719 def remove_range(range) @ranges.delete(range) nil end |
#select_all_children(node) ⇒ Object
741 742 743 744 745 746 |
# File 'lib/dommy/range.rb', line 741 def select_all_children(node) range = Range.new(@document) range.select_node_contents(node) add_range(range) nil end |
#to_s ⇒ Object
748 749 750 |
# File 'lib/dommy/range.rb', line 748 def to_s @ranges.map(&:to_s).join end |