Class: Formular::Element
- Inherits:
-
Object
- Object
- Formular::Element
- Extended by:
- Uber::InheritableAttr
- Defined in:
- lib/formular/element.rb,
lib/formular/elements.rb,
lib/formular/element/module.rb,
lib/formular/element/bootstrap3.rb,
lib/formular/element/bootstrap4.rb,
lib/formular/element/foundation6.rb,
lib/formular/element/modules/hint.rb,
lib/formular/element/modules/error.rb,
lib/formular/element/modules/label.rb,
lib/formular/element/modules/control.rb,
lib/formular/element/modules/wrapped.rb,
lib/formular/element/modules/checkable.rb,
lib/formular/element/modules/container.rb,
lib/formular/element/modules/collection.rb,
lib/formular/element/foundation6/wrapped.rb,
lib/formular/element/modules/escape_value.rb,
lib/formular/element/bootstrap3/horizontal.rb,
lib/formular/element/bootstrap4/horizontal.rb,
lib/formular/element/bootstrap3/input_group.rb,
lib/formular/element/bootstrap4/input_group.rb,
lib/formular/element/foundation6/input_group.rb,
lib/formular/element/bootstrap3/column_control.rb,
lib/formular/element/bootstrap4/custom_control.rb,
lib/formular/element/bootstrap3/checkable_control.rb,
lib/formular/element/bootstrap4/checkable_control.rb,
lib/formular/element/foundation6/checkable_control.rb
Overview
The Element class is responsible for defining what the html should look like. This includes default attributes, and the function to use to render the html actual rendering is done via a HtmlBlock class
Direct Known Subclasses
Defined Under Namespace
Modules: Bootstrap3, Bootstrap4, Foundation6, Module, Modules Classes: Button, Checkbox, Error, ErrorNotification, Form, Hidden, Input, Label, OptGroup, Option, Radio, Select, Submit, Textarea
Constant Summary collapse
- Container =
These three are really just provided for convenience when creating other elements
Class.new(Formular::Element) { include Formular::Element::Modules::Container }
- Control =
Class.new(Formular::Element) { include Formular::Element::Modules::Control }
- Wrapped =
Class.new(Formular::Element) { include Formular::Element::Modules::Wrapped }
- Fieldset =
define some base classes to build from or easily use elsewhere
Class.new(Container) { tag :fieldset }
- Legend =
Class.new(Container) { tag :legend }
- Div =
Class.new(Container) { tag :div }
- P =
Class.new(Container) { tag :p }
- Span =
Class.new(Container) { tag :span }
- Small =
Class.new(Container) { tag :small }
Instance Attribute Summary collapse
-
#builder ⇒ Object
readonly
Returns the value of attribute builder.
-
#html_blocks ⇒ Object
readonly
Returns the value of attribute html_blocks.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#tag ⇒ Object
readonly
Returns the value of attribute tag.
Class Method Summary collapse
-
.add_option_keys(*keys) ⇒ Object
blacklist the keys that should NOT end up as html attributes.
- .call(**options, &block) ⇒ Object
-
.html(context = :default, &block) ⇒ Object
define what your html should look like this block is executed in the context of an HtmlBlock instance.
-
.process_option(key, processor, condition = {}) ⇒ Object
process an option value (i.e. escape html) This occurs after the value has been set (either by default or by user input) you can make this conditional by providing a condition e.g.
-
.rename_html_context(old_context, new_context) ⇒ Object
a convenient way of changing the key for a context useful for inheritance if you want to replace a context but still access the original function.
-
.set_default(key, value, condition = {}) ⇒ Object
set the default value of an option or attribute you can make this conditional by providing a condition e.g.
-
.tag(name) ⇒ Object
define the name of the html tag for the element e.g.
Instance Method Summary collapse
- #attributes ⇒ Object
-
#initialize(**options, &block) ⇒ Element
constructor
A new instance of Element.
- #to_html(context: nil) ⇒ Object (also: #to_s)
Constructor Details
#initialize(**options, &block) ⇒ Element
Returns a new instance of Element.
77 78 79 80 81 82 83 84 85 |
# File 'lib/formular/element.rb', line 77 def initialize(**, &block) @builder = .delete(:builder) @options = @block = block @tag = self.class.tag_name @html_blocks = define_html_blocks end |
Instance Attribute Details
#builder ⇒ Object (readonly)
Returns the value of attribute builder.
86 87 88 |
# File 'lib/formular/element.rb', line 86 def builder @builder end |
#html_blocks ⇒ Object (readonly)
Returns the value of attribute html_blocks.
86 87 88 |
# File 'lib/formular/element.rb', line 86 def html_blocks @html_blocks end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
86 87 88 |
# File 'lib/formular/element.rb', line 86 def @options end |
#tag ⇒ Object (readonly)
Returns the value of attribute tag.
86 87 88 |
# File 'lib/formular/element.rb', line 86 def tag @tag end |
Class Method Details
.add_option_keys(*keys) ⇒ Object
blacklist the keys that should NOT end up as html attributes
58 59 60 |
# File 'lib/formular/element.rb', line 58 def self.add_option_keys(*keys) self.option_keys += keys end |
.call(**options, &block) ⇒ Object
73 74 75 |
# File 'lib/formular/element.rb', line 73 def self.call(**, &block) new(**, &block) end |
.html(context = :default, &block) ⇒ Object
define what your html should look like this block is executed in the context of an HtmlBlock instance
46 47 48 |
# File 'lib/formular/element.rb', line 46 def self.html(context = :default, &block) self.html_blocks[context] = block end |
.process_option(key, processor, condition = {}) ⇒ Object
process an option value (i.e. escape html) This occurs after the value has been set (either by default or by user input) you can make this conditional by providing a condition e.g. if: :some_method or unless: :some_method
40 41 42 |
# File 'lib/formular/element.rb', line 40 def self.process_option(key, processor, condition = {}) self.processing_hash[key] = { processor: processor, condition: condition } end |
.rename_html_context(old_context, new_context) ⇒ Object
a convenient way of changing the key for a context useful for inheritance if you want to replace a context but still access the original function
53 54 55 |
# File 'lib/formular/element.rb', line 53 def self.rename_html_context(old_context, new_context) self.html_blocks[new_context] = self.html_blocks.delete(old_context) end |
.set_default(key, value, condition = {}) ⇒ Object
set the default value of an option or attribute you can make this conditional by providing a condition e.g. if: :some_method or unless: :some_method to respect the order defaults are declared, rather than overriting existing defaults we should delete the existing and create a new k/v pair
31 32 33 34 |
# File 'lib/formular/element.rb', line 31 def self.set_default(key, value, condition = {}) self.default_hash.delete(key) # attempt to delete an existing key self.default_hash[key] = { value: value, condition: condition } end |
.tag(name) ⇒ Object
define the name of the html tag for the element e.g. tag :span tag ‘input’ Note that if you leave this out, the tag will be inferred based on the name of your class Also, this is not inherited
69 70 71 |
# File 'lib/formular/element.rb', line 69 def self.tag(name) self.tag_name = name end |
Instance Method Details
#attributes ⇒ Object
88 89 90 91 |
# File 'lib/formular/element.rb', line 88 def attributes attrs = @options.select { |k, v| @options[k] || true unless option_key?(k) } Attributes[attrs] end |
#to_html(context: nil) ⇒ Object Also known as: to_s
93 94 95 96 |
# File 'lib/formular/element.rb', line 93 def to_html(context: nil) context ||= self.class.html_context html_blocks[context].call end |