Class: Dommy::Selection
- Inherits:
-
Object
- Object
- Dommy::Selection
- 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
Constructor Details
#initialize(document) ⇒ Selection
Returns a new instance of Selection.
482 483 484 485 |
# File 'lib/dommy/range.rb', line 482 def initialize(document) @document = document @ranges = [] end |
Instance Method Details
#__js_call__(method, args) ⇒ Object
576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 |
# File 'lib/dommy/range.rb', line 576 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
557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 |
# File 'lib/dommy/range.rb', line 557 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
495 496 497 498 499 500 |
# File 'lib/dommy/range.rb', line 495 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
535 536 537 |
# File 'lib/dommy/range.rb', line 535 def anchor_node @ranges.first&.start_container end |
#anchor_offset ⇒ Object
539 540 541 |
# File 'lib/dommy/range.rb', line 539 def anchor_offset @ranges.first&.start_offset || 0 end |
#collapse(node, offset = 0) ⇒ Object
516 517 518 519 520 521 522 |
# File 'lib/dommy/range.rb', line 516 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
512 513 514 |
# File 'lib/dommy/range.rb', line 512 def empty remove_all_ranges end |
#focus_node ⇒ Object
543 544 545 |
# File 'lib/dommy/range.rb', line 543 def focus_node @ranges.first&.end_container end |
#focus_offset ⇒ Object
547 548 549 |
# File 'lib/dommy/range.rb', line 547 def focus_offset @ranges.first&.end_offset || 0 end |
#get_range_at(index) ⇒ Object
491 492 493 |
# File 'lib/dommy/range.rb', line 491 def get_range_at(index) @ranges[index.to_i] end |
#is_collapsed ⇒ Object Also known as: isCollapsed
551 552 553 |
# File 'lib/dommy/range.rb', line 551 def is_collapsed @ranges.empty? || @ranges.first.collapsed? end |
#range_count ⇒ Object
487 488 489 |
# File 'lib/dommy/range.rb', line 487 def range_count @ranges.length end |
#remove_all_ranges ⇒ Object
507 508 509 510 |
# File 'lib/dommy/range.rb', line 507 def remove_all_ranges @ranges.clear nil end |
#remove_range(range) ⇒ Object
502 503 504 505 |
# File 'lib/dommy/range.rb', line 502 def remove_range(range) @ranges.delete(range) nil end |
#select_all_children(node) ⇒ Object
524 525 526 527 528 529 |
# File 'lib/dommy/range.rb', line 524 def select_all_children(node) range = Range.new(@document) range.select_node_contents(node) add_range(range) nil end |
#to_s ⇒ Object
531 532 533 |
# File 'lib/dommy/range.rb', line 531 def to_s @ranges.map(&:to_s).join end |