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).
Spec: www.w3.org/TR/selection-api/
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.
547 548 549 550 |
# File 'lib/dommy/range.rb', line 547 def initialize(document) @document = document @ranges = [] end |
Instance Method Details
#__js_call__(method, args) ⇒ Object
645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 |
# File 'lib/dommy/range.rb', line 645 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
622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 |
# File 'lib/dommy/range.rb', line 622 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" end end |
#add_range(range) ⇒ Object
560 561 562 563 564 565 |
# File 'lib/dommy/range.rb', line 560 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
600 601 602 |
# File 'lib/dommy/range.rb', line 600 def anchor_node @ranges.first&.start_container end |
#anchor_offset ⇒ Object
604 605 606 |
# File 'lib/dommy/range.rb', line 604 def anchor_offset @ranges.first&.start_offset || 0 end |
#collapse(node, offset = 0) ⇒ Object
581 582 583 584 585 586 587 |
# File 'lib/dommy/range.rb', line 581 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
577 578 579 |
# File 'lib/dommy/range.rb', line 577 def empty remove_all_ranges end |
#focus_node ⇒ Object
608 609 610 |
# File 'lib/dommy/range.rb', line 608 def focus_node @ranges.first&.end_container end |
#focus_offset ⇒ Object
612 613 614 |
# File 'lib/dommy/range.rb', line 612 def focus_offset @ranges.first&.end_offset || 0 end |
#get_range_at(index) ⇒ Object
556 557 558 |
# File 'lib/dommy/range.rb', line 556 def get_range_at(index) @ranges[index.to_i] end |
#is_collapsed ⇒ Object Also known as: isCollapsed
616 617 618 |
# File 'lib/dommy/range.rb', line 616 def is_collapsed @ranges.empty? || @ranges.first.collapsed? end |
#range_count ⇒ Object
552 553 554 |
# File 'lib/dommy/range.rb', line 552 def range_count @ranges.length end |
#remove_all_ranges ⇒ Object
572 573 574 575 |
# File 'lib/dommy/range.rb', line 572 def remove_all_ranges @ranges.clear nil end |
#remove_range(range) ⇒ Object
567 568 569 570 |
# File 'lib/dommy/range.rb', line 567 def remove_range(range) @ranges.delete(range) nil end |
#select_all_children(node) ⇒ Object
589 590 591 592 593 594 |
# File 'lib/dommy/range.rb', line 589 def select_all_children(node) range = Range.new(@document) range.select_node_contents(node) add_range(range) nil end |
#to_s ⇒ Object
596 597 598 |
# File 'lib/dommy/range.rb', line 596 def to_s @ranges.map(&:to_s).join end |