Class: Dommy::MediaList
- Inherits:
-
Object
- Object
- Dommy::MediaList
- Includes:
- Bridge::Methods
- Defined in:
- lib/dommy/css.rb
Overview
MediaList — the CSSOM list of comma-separated media queries behind
CSSMediaRule#media (and <style>/<link>/CSSStyleSheet#media).
Indexed, with mediaText/append/delete editing; on_change (optional) is
called with the new media text after any mutation so the owner can persist
it.
Instance Method Summary collapse
- #__js_call__(method, args) ⇒ Object
- #__js_get__(key) ⇒ Object
- #__js_set__(key, value) ⇒ Object
-
#append_medium(medium) ⇒ Object
css-mediaqueries: appendMedium is a no-op when the medium is already present (case-insensitively); deleteMedium removes every match.
- #delete_medium(medium) ⇒ Object
-
#initialize(media_text = "", on_change: nil) ⇒ MediaList
constructor
A new instance of MediaList.
- #item(index) ⇒ Object
- #length ⇒ Object
- #media_text ⇒ Object
- #media_text=(text) ⇒ Object
- #to_s ⇒ Object
Methods included from Bridge::Methods
Constructor Details
#initialize(media_text = "", on_change: nil) ⇒ MediaList
Returns a new instance of MediaList.
631 632 633 634 |
# File 'lib/dommy/css.rb', line 631 def initialize(media_text = "", on_change: nil) @items = parse(media_text) @on_change = on_change end |
Instance Method Details
#__js_call__(method, args) ⇒ Object
693 694 695 696 697 698 699 700 |
# File 'lib/dommy/css.rb', line 693 def __js_call__(method, args) case method when "item" then item(args[0]) when "appendMedium" then append_medium(args[0]) when "deleteMedium" then delete_medium(args[0]) when "toString" then to_s end end |
#__js_get__(key) ⇒ Object
674 675 676 677 678 679 680 681 |
# File 'lib/dommy/css.rb', line 674 def __js_get__(key) case key when "length" then length when "mediaText" then media_text else item(key.to_i) if key.is_a?(Integer) || key.to_s.match?(/\A\d+\z/) end end |
#__js_set__(key, value) ⇒ Object
683 684 685 686 687 688 689 |
# File 'lib/dommy/css.rb', line 683 def __js_set__(key, value) return Bridge::UNHANDLED unless key == "mediaText" # [LegacyNullToEmptyString]: `media.mediaText = null` clears it. self.media_text = value.nil? ? "" : value nil end |
#append_medium(medium) ⇒ Object
css-mediaqueries: appendMedium is a no-op when the medium is already present (case-insensitively); deleteMedium removes every match.
656 657 658 659 660 661 662 |
# File 'lib/dommy/css.rb', line 656 def append_medium(medium) medium = medium.to_s.strip return if medium.empty? || @items.any? { |existing| existing.casecmp(medium).zero? } @items << medium notify end |
#delete_medium(medium) ⇒ Object
664 665 666 667 668 |
# File 'lib/dommy/css.rb', line 664 def delete_medium(medium) medium = medium.to_s.strip @items.reject! { |existing| existing.casecmp(medium).zero? } notify end |
#item(index) ⇒ Object
640 641 642 643 |
# File 'lib/dommy/css.rb', line 640 def item(index) i = index.to_i i.negative? || i >= @items.length ? nil : @items[i] end |
#length ⇒ Object
636 637 638 |
# File 'lib/dommy/css.rb', line 636 def length @items.length end |
#media_text ⇒ Object
645 646 647 |
# File 'lib/dommy/css.rb', line 645 def media_text @items.join(", ") end |
#media_text=(text) ⇒ Object
649 650 651 652 |
# File 'lib/dommy/css.rb', line 649 def media_text=(text) @items = parse(text) notify end |
#to_s ⇒ Object
670 671 672 |
# File 'lib/dommy/css.rb', line 670 def to_s media_text end |