Class: Dommy::CSSStyleSheet
- Inherits:
-
Object
- Object
- Dommy::CSSStyleSheet
- Defined in:
- lib/dommy/css.rb
Overview
‘CSSStyleSheet` — stub implementation. Dommy has no CSS parser nor a render tree, so we don’t interpret rule text; the sheet acts as an ordered list of opaque ‘CSSRule`-like wrappers.
Useful for code that does:
sheet.insertRule("p { color: red }", 0);
for (const r of sheet.cssRules) console.log(r.cssText);
‘disabled` is honored as state. `href`, `media`, `title`, `type` mirror the owner node’s attributes when present.
Instance Attribute Summary collapse
-
#css_rules ⇒ Object
readonly
Returns the value of attribute css_rules.
-
#owner_node ⇒ Object
readonly
Returns the value of attribute owner_node.
Instance Method Summary collapse
- #__js_call__(method, args) ⇒ Object
- #__js_get__(key) ⇒ Object
- #__js_set__(key, value) ⇒ Object
- #delete_rule(index) ⇒ Object
- #disabled ⇒ Object
- #disabled=(v) ⇒ Object
- #href ⇒ Object
-
#initialize(owner_node:, href: nil, media: nil, title: nil, type: "text/css") ⇒ CSSStyleSheet
constructor
A new instance of CSSStyleSheet.
-
#insert_rule(rule_text, index = nil) ⇒ Object
‘insertRule(rule_text, index)` — appends an opaque CSSRule at the given position (default: end).
- #media ⇒ Object
- #owner_rule ⇒ Object
- #parent_style_sheet ⇒ Object
-
#replace(text) ⇒ Object
‘replace(text)` — spec returns a Promise resolved with self.
-
#replace_sync(text) ⇒ Object
‘replaceSync(text)` — replace all rules with a single rule blob (no parsing — we keep it as one opaque entry).
- #title ⇒ Object
- #type ⇒ Object
Constructor Details
#initialize(owner_node:, href: nil, media: nil, title: nil, type: "text/css") ⇒ CSSStyleSheet
Returns a new instance of CSSStyleSheet.
18 19 20 21 22 23 24 25 26 |
# File 'lib/dommy/css.rb', line 18 def initialize(owner_node:, href: nil, media: nil, title: nil, type: "text/css") @owner_node = owner_node @href = href @media = media @title = title @type = type @disabled = false @css_rules = CSSRuleList.new end |
Instance Attribute Details
#css_rules ⇒ Object (readonly)
Returns the value of attribute css_rules.
16 17 18 |
# File 'lib/dommy/css.rb', line 16 def css_rules @css_rules end |
#owner_node ⇒ Object (readonly)
Returns the value of attribute owner_node.
16 17 18 |
# File 'lib/dommy/css.rb', line 16 def owner_node @owner_node end |
Instance Method Details
#__js_call__(method, args) ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/dommy/css.rb', line 128 def __js_call__(method, args) case method when "insertRule" insert_rule(args[0], args[1]) when "deleteRule" delete_rule(args[0]) when "replaceSync" replace_sync(args[0]) when "replace" replace(args[0]) end end |
#__js_get__(key) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/dommy/css.rb', line 96 def __js_get__(key) case key when "cssRules", "rules" @css_rules when "disabled" @disabled when "href" @href when "media" media when "title" @title when "type" @type when "ownerNode" @owner_node when "parentStyleSheet" parent_style_sheet when "ownerRule" owner_rule end end |
#__js_set__(key, value) ⇒ Object
119 120 121 122 123 124 125 126 |
# File 'lib/dommy/css.rb', line 119 def __js_set__(key, value) case key when "disabled" self.disabled = value end nil end |
#delete_rule(index) ⇒ Object
70 71 72 73 74 75 76 |
# File 'lib/dommy/css.rb', line 70 def delete_rule(index) idx = index.to_i raise DOMException::IndexSizeError, "out of range" if idx < 0 || idx >= @css_rules.length @css_rules.__delete_at__(idx) nil end |
#disabled ⇒ Object
28 29 30 |
# File 'lib/dommy/css.rb', line 28 def disabled @disabled end |
#disabled=(v) ⇒ Object
32 33 34 |
# File 'lib/dommy/css.rb', line 32 def disabled=(v) @disabled = !!v end |
#href ⇒ Object
36 37 38 |
# File 'lib/dommy/css.rb', line 36 def href @href end |
#insert_rule(rule_text, index = nil) ⇒ Object
‘insertRule(rule_text, index)` — appends an opaque CSSRule at the given position (default: end). Returns the index used.
62 63 64 65 66 67 68 |
# File 'lib/dommy/css.rb', line 62 def insert_rule(rule_text, index = nil) idx = index.nil? ? @css_rules.length : index.to_i raise DOMException::IndexSizeError, "out of range" if idx < 0 || idx > @css_rules.length @css_rules.__insert__(idx, CSSRule.new(rule_text.to_s, self)) idx end |
#media ⇒ Object
48 49 50 |
# File 'lib/dommy/css.rb', line 48 def media @media.to_s end |
#owner_rule ⇒ Object
56 57 58 |
# File 'lib/dommy/css.rb', line 56 def owner_rule nil end |
#parent_style_sheet ⇒ Object
52 53 54 |
# File 'lib/dommy/css.rb', line 52 def parent_style_sheet nil end |
#replace(text) ⇒ Object
‘replace(text)` — spec returns a Promise resolved with self. We can’t return a JS-bridge Promise from here without a Window, so we mirror the sync behavior and return self.
91 92 93 94 |
# File 'lib/dommy/css.rb', line 91 def replace(text) replace_sync(text) self end |
#replace_sync(text) ⇒ Object
‘replaceSync(text)` — replace all rules with a single rule blob (no parsing — we keep it as one opaque entry).
80 81 82 83 84 85 86 |
# File 'lib/dommy/css.rb', line 80 def replace_sync(text) @css_rules.__clear__ return nil if text.to_s.empty? @css_rules.__insert__(0, CSSRule.new(text.to_s, self)) nil end |
#title ⇒ Object
40 41 42 |
# File 'lib/dommy/css.rb', line 40 def title @title end |
#type ⇒ Object
44 45 46 |
# File 'lib/dommy/css.rb', line 44 def type @type end |