Module: HTMLComponent
- Included in:
- DropdownComponent, OrderedListComponent, RadioGroupComponent, TableComponent, TableRowComponent, UnorderedListComponent
- Defined in:
- lib/html-native.rb,
lib/html-native/logic.rb,
lib/html-native/builder.rb,
lib/html-native/constants.rb
Defined Under Namespace
Classes: Builder
Constant Summary collapse
- TAG_LIST =
A list of all valid HTML5 elements. These are used to generate generator methods within HTMLComponent contexts.
[ :html, :base, :head, :link, :meta, :style, :title, :body, :address, :article, :aside, :footer, :h1, :h2, :h3, :h4, :h5, :h6, :header, :hgroup, :main, :nav, :section, :blockquote, :dd, :div, :dl, :dt, :figcaption, :figure, :hr, :li, :ol, :p, :pre, :ul, :a, :abbr, :b, :bdi, :bdo, :br, :cite, :code, :data, :dfn, :em, :i, :kbd, :mark, :q, :rb, :rp, :rt, :rtc, :ruby, :s, :samp, :small, :span, :strong, :sub, :sup, :time, :u, :var, :wbr, :area, :audio, :img, :map, :track, :video, :embed, :iframe, :object, :param, :picture, :portal, :source, :svg, :math, :canvas, :noscript, :script, :del, :ins, :caption, :col, :colgroup, :table, :tbody, :td, :tfoot, :th, :thead, :tr, :button, :datalist, :fieldset, :form, :input, :label, :legend, :meter, :optgroup, :option, :output, :progress, :select, :textarea, :details, :dialog, :menu, :summary, :slot, :template ]
- LIMITED_ATTRIBUTES =
A list of all limited attributes in HTML5. Any attribute not listed here are free to use in any element, as long as it is not in FORBIDDEN_ATTRIBUTES.
Any attributes listed here will only be allowed in the associated elements.
{ accept: [:form, :input], "accept-charset": [:form], action: [:form], align: [:caption, :col, :colgroup, :hr, :iframe, :img, :table, :tbody, :td, :tfoot, :th, :thead, :tr], allow: [:iframe], alt: [:area, :img, :input], async: [:script], autocomplete: [:form, :input, :select, :textarea], autofocus: [:button, :input, :select, :textarea], autoplay: [:audio, :video], buffered: [:audio, :video], capture: [:input], charset: [:meta, :script], checked: [:input], cite: [:blockquote, :del, :ins, :q], cols: [:textarea], colspan: [:td, :th], content: [:meta], controls: [:audio, :video], coords: [:area], crossorigin: [:audio, :img, :link, :script, :video], csp: [:iframe], data: [:object], datatime: [:del, :ins, :time], decoding: [:img], default: [:track], defer: [:script], dirname: [:input, :textarea], disabled: [:button, :fieldset, :input, :optgroup, :option, :select, :textarea], download: [:a, :area], enctype: [:form], enterkeyhint: [:textarea], "for": [:label, :output], form: [:button, :fieldset, :input, :label, :meter, :object, :output, :progress, :select, :textarea], formaction: [:input, :button], formentype: [:button, :input], formmethod: [:button, :input], formnovalidate: [:button, :input], formtarget: [:button, :input], headers: [:td, :th], height: [:canvas, :embed, :iframe, :img, :input, :object, :video], high: [:meter], href: [:a, :area, :base, :link], hreflang: [:a, :area, :link], "http-equiv": [:meta], importance: [:iframe, :img, :link, :script], integrity: [:link, :script], inputmode: [:textarea], ismap: [:img], kind: [:track], label: [:optgroup, :option, :track], language: [:script], loading: [:img, :iframe], list: [:input], loop: [:audio, :video], low: [:meter], max: [:input, :meter, :progress], maxlength: [:input, :textarea], minlength: [:input, :textarea], media: [:a, :area, :link, :source, :style], method: [:form], min: [:input, :select], multiple: [:input, :select], muted: [:audio, :video], name: [:button, :form, :fieldset, :iframe, :input, :object, :output, :select, :textarea, :map, :meta, :param], novalidate: [:form], open: [:details], optimum: [:meter], pattern: [:input], ping: [:a, :area], placeholder: [:input, :textarea], poster: [:video], preload: [:audio, :video], readonly: [:input, :textarea], referrerpolicy: [:a, :area, :iframe, :img, :link, :script], rel: [:a, :area, :link], required: [:input, :select, :textarea], reversed: [:ol], rows: [:textarea], rowspan: [:td, :th], sandbox: [:iframe], scope: [:th], scoped: [:style], selected: [:option], shape: [:a, :area], size: [:input, :select], sizes: [:link, :img, :source], span: [:col, :colgroup], src: [:audio, :embed, :iframe, :img, :input, :script, :source, :track, :video], srcdoc: [:iframe], srclang: [:track], srcset: [:img, :source], start: [:ol], step: [:input], summary: [:table], target: [:a, :area, :base, :form], type: [:button, :input, :embed, :object, :script, :source, :style, :menu], usemap: [:img, :input, :object], value: [:button, :data, :input, :li, :meter, :option, :progress, :param], width: [:canvas, :embed, :iframe, :img, :input, :object, :video], wrap: [:textarea] }
- FORBIDDEN_ATTRIBUTES =
These attributes are deprecated or outright forbidden. However, some people might still try to use them. These attributes are expressly disallowed during generation, and won’t be included, even if provided.
[:background, :bgcolor, :border, :color, :manifest]
Class Method Summary collapse
-
.singleton(&block) ⇒ Object
Creates a module that encompasses the given block in an HTMLComponent context.
Instance Method Summary collapse
- #doctype(type) ⇒ Object
-
#valid_attribute?(tag, attribute) ⇒ Boolean
Checks if the attribute is valid for a given tag.
Class Method Details
.singleton(&block) ⇒ Object
Creates a module that encompasses the given block in an HTMLComponent context. This gives access to methods in the block as though the block was declared as the render function in a module extending HTMLComponent (pretty much because it is).
29 30 31 32 33 34 |
# File 'lib/html-native.rb', line 29 def self.singleton(&block) Module.new do extend HTMLComponent define_singleton_method :render, &block end end |
Instance Method Details
#doctype(type) ⇒ Object
21 22 23 |
# File 'lib/html-native.rb', line 21 def doctype(type) Builder.new("<!DOCTYPE #{type}>") end |
#valid_attribute?(tag, attribute) ⇒ Boolean
Checks if the attribute is valid for a given tag.
For example, class and hidden are valid for everything, but autoplay is valid for only video and audio tags, and invalid for all other tags.
40 41 42 43 44 45 |
# File 'lib/html-native.rb', line 40 def valid_attribute?(tag, attribute) if LIMITED_ATTRIBUTES.key?(attribute.to_sym) return LIMITED_ATTRIBUTES[attribute.to_sym].include?(tag.to_sym) end return !FORBIDDEN_ATTRIBUTES.include?(attribute) end |