Module: Hyalite::DOMProperty
- Defined in:
- lib/hyalite/dom_property.rb
Constant Summary collapse
- ID_ATTRIBUTE_NAME =
'data-hyalite-id'
- MUST_USE_ATTRIBUTE =
1
- MUST_USE_PROPERTY =
2
- HAS_BOOLEAN_VALUE =
4
- HAS_SIDE_EFFECTS =
8
- HAS_NUMERIC_VALUE =
16
- HAS_POSITIVE_NUMERIC_VALUE =
32
- HAS_OVERLOADED_BOOLEAN_VALUE =
64
- PROPERTIES =
{ ############################### ### Standard Properties ############################### accept: nil, acceptCharset: nil, accessKey: nil, action: nil, allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, allowTransparency: MUST_USE_ATTRIBUTE, alt: nil, async: HAS_BOOLEAN_VALUE, autoComplete: nil, # autoFocus is polyfilled/normalized by AutoFocusUtils # autoFocus: HAS_BOOLEAN_VALUE, autoPlay: HAS_BOOLEAN_VALUE, capture: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, cellPadding: nil, cellSpacing: nil, charSet: MUST_USE_ATTRIBUTE, challenge: MUST_USE_ATTRIBUTE, checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, classID: MUST_USE_ATTRIBUTE, className: MUST_USE_PROPERTY, class: MUST_USE_ATTRIBUTE, cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE, colSpan: nil, content: nil, contentEditable: nil, contextMenu: MUST_USE_ATTRIBUTE, controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, coords: nil, crossOrigin: nil, data: nil, # For `<object />` acts as `src`. dateTime: MUST_USE_ATTRIBUTE, defer: HAS_BOOLEAN_VALUE, dir: nil, disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, download: HAS_OVERLOADED_BOOLEAN_VALUE, draggable: nil, encType: nil, form: MUST_USE_ATTRIBUTE, formAction: MUST_USE_ATTRIBUTE, formEncType: MUST_USE_ATTRIBUTE, formMethod: MUST_USE_ATTRIBUTE, formNoValidate: HAS_BOOLEAN_VALUE, formTarget: MUST_USE_ATTRIBUTE, frameBorder: MUST_USE_ATTRIBUTE, headers: nil, height: MUST_USE_ATTRIBUTE, hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, high: nil, href: nil, hrefLang: nil, htmlFor: nil, for: nil, httpEquiv: nil, icon: nil, id: MUST_USE_PROPERTY, inputMode: MUST_USE_ATTRIBUTE, is: MUST_USE_ATTRIBUTE, keyParams: MUST_USE_ATTRIBUTE, keyType: MUST_USE_ATTRIBUTE, label: nil, lang: nil, list: MUST_USE_ATTRIBUTE, loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, low: nil, manifest: MUST_USE_ATTRIBUTE, marginHeight: nil, marginWidth: nil, max: nil, maxLength: MUST_USE_ATTRIBUTE, media: MUST_USE_ATTRIBUTE, mediaGroup: nil, method: nil, min: nil, minLength: MUST_USE_ATTRIBUTE, multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, name: nil, noValidate: HAS_BOOLEAN_VALUE, open: HAS_BOOLEAN_VALUE, optimum: nil, pattern: nil, placeholder: nil, poster: nil, preload: nil, radioGroup: nil, readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, rel: nil, required: HAS_BOOLEAN_VALUE, role: MUST_USE_ATTRIBUTE, rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE, rowSpan: nil, sandbox: nil, scope: nil, scoped: HAS_BOOLEAN_VALUE, scrolling: nil, seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, shape: nil, size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE, sizes: MUST_USE_ATTRIBUTE, span: HAS_POSITIVE_NUMERIC_VALUE, spellCheck: nil, src: nil, srcDoc: MUST_USE_PROPERTY, srcSet: MUST_USE_ATTRIBUTE, start: HAS_NUMERIC_VALUE, step: nil, style: nil, tabIndex: nil, target: nil, title: nil, type: nil, useMap: nil, value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS, width: MUST_USE_ATTRIBUTE, wmode: MUST_USE_ATTRIBUTE, ############################### ### Non-standard Properties ############################### # autoCapitalize and autoCorrect are supported in Mobile Safari for # keyboard hints. autoCapitalize: nil, autoCorrect: nil, # itemProp, itemScope, itemType are for # Microdata support. See http:#schema.org/docs/gs.html itemProp: MUST_USE_ATTRIBUTE, itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, itemType: MUST_USE_ATTRIBUTE, # itemID and itemRef are for Microdata support as well but # only specified in the the WHATWG spec document. See # https:#html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api itemID: MUST_USE_ATTRIBUTE, itemRef: MUST_USE_ATTRIBUTE, # property is supported for OpenGraph in meta tags. property: nil, # IE-only attribute that specifies security restrictions on an iframe # as an alternative to the sandbox attribute on IE<10 security: MUST_USE_ATTRIBUTE, # IE-only attribute that controls focus behavior unselectable: MUST_USE_ATTRIBUTE, }
- DOM_ATTRIBUTE_NAMES =
{ acceptCharset: 'accept-charset', className: 'class', htmlFor: 'for', httpEquiv: 'http-equiv' }
Class Method Summary collapse
- .default_value_cache ⇒ Object
- .default_value_for_property(node_name, prop) ⇒ Object
- .include?(name) ⇒ Boolean
- .is_custom_attribute(attribute_name) ⇒ Object
- .property_info(name) ⇒ Object
Class Method Details
.default_value_cache ⇒ Object
211 212 213 |
# File 'lib/hyalite/dom_property.rb', line 211 def default_value_cache @default_value_cache ||= {} end |
.default_value_for_property(node_name, prop) ⇒ Object
199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/hyalite/dom_property.rb', line 199 def default_value_for_property(node_name, prop) node_defaults = default_value_cache[node_name] unless node_defaults default_value_cache[node_name] = node_defaults = {} end unless node_defaults.include? prop test_element = $document.create_element(node_name) node_defaults[prop] = test_element[prop] end node_defaults[prop] end |
.include?(name) ⇒ Boolean
195 196 197 |
# File 'lib/hyalite/dom_property.rb', line 195 def include?(name) PROPERTIES.has_key? name end |
.is_custom_attribute(attribute_name) ⇒ Object
215 216 217 |
# File 'lib/hyalite/dom_property.rb', line 215 def is_custom_attribute(attribute_name) !!(/^(data|aria)-[a-z_][a-z\d_.\-]*$/ =~ attribute_name) end |
.property_info(name) ⇒ Object
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/hyalite/dom_property.rb', line 168 def property_info(name) return nil unless PROPERTIES.has_key? name.to_sym @property_info ||= {} unless @property_info.has_key? name property = PROPERTIES[name.to_sym] attribute_name = DOM_ATTRIBUTE_NAMES.has_key?(name) ? DOM_ATTRIBUTE_NAMES[name] : name.downcase @property_info[name] = { attribute_name: attribute_name, attribute_namespace: nil, property_name: name, mutation_method: nil, must_use_attribute: property && property & MUST_USE_ATTRIBUTE > 0, must_use_property: property && property & MUST_USE_PROPERTY > 0, has_side_effects: property && property & HAS_SIDE_EFFECTS > 0, has_boolean_value: property && property & HAS_BOOLEAN_VALUE > 0, has_numeric_value: property && property & HAS_NUMERIC_VALUE > 0, has_positive_numeric_value: property && property & HAS_POSITIVE_NUMERIC_VALUE > 0, has_overloaded_boolean_value: property && property & HAS_OVERLOADED_BOOLEAN_VALUE > 0 } end @property_info[name] end |