This is an automated email from the ASF dual-hosted git repository.
curcuru pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git
The following commit(s) were added to refs/heads/master by this push:
new 17edaac Refactor into utility methods; thanks to rubys
17edaac is described below
commit 17edaac3e5a007cca031ebcbd65b48badc054524
Author: Shane Curcuru <[email protected]>
AuthorDate: Fri May 3 17:49:35 2019 -0400
Refactor into utility methods; thanks to rubys
---
lib/whimsy/asf/forms.rb | 172 +++++++++++++++++++-----------------------------
1 file changed, 68 insertions(+), 104 deletions(-)
diff --git a/lib/whimsy/asf/forms.rb b/lib/whimsy/asf/forms.rb
index eaa3209..2176038 100644
--- a/lib/whimsy/asf/forms.rb
+++ b/lib/whimsy/asf/forms.rb
@@ -4,136 +4,100 @@ require 'wunderbar/markdown'
# Define common page features for whimsy tools using bootstrap styles
class Wunderbar::HtmlMarkup
- # Utility function to add icons to form controls
- def _whimsy_forms_iconlink(icon: nil, iconlabel: nil, iconlink: nil)
- if iconlink
+ # Utility function to add icons after form controls
+ def _whimsy_forms_iconlink(**args)
+ if args[:iconlink]
_div.input_group_btn do
- _a.btn.btn_default type: 'button', aria_label: "#{iconlabel}", href:
"#{iconlink}", target: 'whimsy_help' do
- _span.glyphicon class: "#{icon}", aria_label: "#{iconlabel}"
+ _a.btn.btn_default type: 'button', aria_label: "#{iconlabel}", href:
"#{args[:iconlink]}", target: 'whimsy_help' do
+ _span.glyphicon class: "#{args[:icon]}", aria_label:
"#{args[:iconlabel]}"
end
end
- elsif icon
+ elsif args[:icon]
_span.input_group_addon do
- _span.glyphicon class: "#{icon}", aria_label: "#{iconlabel}"
+ _span.glyphicon class: "#{args[:icon]}", aria_label:
"#{args[:iconlabel]}"
end
end
end
- # Display a single input control within a form; or if rows, then a textarea
- # @param name required string ID of control's label
- def _whimsy_forms_input(
- name: nil,
- label: 'Enter string',
- type: 'text',
- rows: nil, # If rows, then is a textarea instead of input
- value: '',
- required: false,
- readonly: false,
- icon: nil,
- iconlabel: nil,
- iconlink: nil,
- placeholder: nil,
- pattern: nil,
- helptext: nil
- )
- return unless name
- aria_describedby = "#{name}_help" if helptext
+ # Utility function for divs around form controls, including help
+ def _whimsy_control_wrapper(**args)
_div.form_group do
- _label.control_label.col_sm_3 label, for: "#{name}"
+ _label.control_label.col_sm_3 args[:label], for: "#{args[:name]}"
_div.col_sm_9 do
_div.input_group do
- args = {
- class: 'form-control', name: "#{name}", id: "#{name}",
- type: "#{type}", placeholder: "#{placeholder}",
- aria_describedby: "#{aria_describedby}", required: required,
readonly: readonly
- }
- if rows
- args[:rows] = rows
- _textarea! args do
- _! value
- end
- else
- args[:value] = value
- args[:pattern] = "#{pattern}" if pattern
- _input args
- end
- _whimsy_forms_iconlink(icon: icon, iconlabel: iconlabel, iconlink:
iconlink)
+ yield
+ _whimsy_forms_iconlink(args)
end
- if helptext
- _span.help_block id: "#{aria_describedby}" do
- _markdown "#{helptext}"
+ if args[:helptext]
+ _span.help_block id: "#{args[:aria_describedby]}" do
+ _markdown "#{args[:helptext]}"
end
end
end
end
end
+ # Display a single input control within a form; or if rows, then a textarea
+ # @param name required string ID of control's label
+ def _whimsy_forms_input(**args)
+ return unless args[:name]
+ args[:label] ||= 'Enter string'
+ args[:type] ||= 'text'
+ args[:id] = args[:name]
+ args[:aria_describedby] = "#{args[:name]}_help" if args[:helptext]
+ _whimsy_control_wrapper(args) do
+ args[:class] = 'form-control'
+ if args[:rows]
+ _textarea! args do
+ _! args[:value]
+ end
+ else
+ _input args
+ end
+ end
+ end
+
# Display an optionlist control within a form
# @param name required string ID of control's label
# @param options required ['value'] or {"value" => 'Label for value'} of all
selectable values
# @param values required 'value' or ['value'] or {"value" => 'Label for
value'} of all selected values
# @param placeholder Currently displayed text if passed (not selectable)
- def _whimsy_forms_select(
- name: nil,
- label: 'Select value(s)',
- values: nil,
- options: nil,
- multiple: false,
- required: false,
- readonly: false,
- icon: nil,
- iconlabel: nil,
- iconlink: nil,
- placeholder: nil,
- helptext: nil
- )
- return unless name
- return unless values
- aria_describedby = "#{name}_help" if helptext
- _div.form_group do
- _label.control_label.col_sm_3 label, for: "#{name}"
- _div.col_sm_9 do
- _div.input_group do
- args = {
- name: "#{name}", id: "#{name}", aria_describedby:
"#{aria_describedby}", required: required, readonly: readonly
- }
- if multiple
- args['multiple'] = 'true'
+ def _whimsy_forms_select(**args)
+ return unless args[:name]
+ return unless args[:values]
+ args[:label] ||= 'Select value(s)'
+ args[:id] = args[:name]
+ args[:aria_describedby] = "#{args[:name]}_help" if args[:helptext]
+ _whimsy_control_wrapper(args) do
+ if args[:multiple]
+ args[:multiple] = 'true'
+ end
+ _select.form_control args do
+ if ''.eql?(args[:placeholder])
+ _option '', value: '', selected: 'selected'
+ else
+ _option "#{args[:placeholder]}", value: '', selected: 'selected',
disabled: 'disabled', hidden: 'hidden'
+ end
+ # Construct selectable list from values (first) then options
+ if args[:values].kind_of?(Array)
+ args[:values].each do |val|
+ _option val, value: val, selected: true
end
- _select.form_control args do
- if ''.eql?(placeholder)
- _option '', value: '', selected: 'selected'
- else
- _option "#{placeholder}", value: '', selected: 'selected',
disabled: 'disabled', hidden: 'hidden'
- end
- # Construct selectable list from values (first) then options
- if values.kind_of?(Array)
- values.each do |val|
- _option val, value: val, selected: true
- end
- elsif values.kind_of?(Hash)
- values.each do |val, disp|
- _option disp, value: val, selected: true
- end
- elsif values # Fallback for simple case of single string value
- _option "#{values}", value: "#{values}", selected: true
- values = [values] # Ensure supports .include? for options loop
below
- end
- if options.kind_of?(Array)
- options.each do |val|
- _option val, value: val unless values.include?(val)
- end
- elsif options.kind_of?(Hash)
- options.each do |val, disp|
- _option disp, value: val unless values.include?(val)
- end
- end
+ elsif args[:values].kind_of?(Hash)
+ args[:values].each do |val, disp|
+ _option disp, value: val, selected: true
end
- _whimsy_forms_iconlink(icon: icon, iconlabel: iconlabel, iconlink:
iconlink)
+ elsif args[:values] # Fallback for simple case of single string value
+ _option "#{args[:values]}", value: "#{args[:values]}", selected: true
+ args[:values] = [args[:values]] # Ensure supports .include? for
options loop below
end
- if helptext
- _span.help_block id: "#{aria_describedby}" do
- _markdown "#{helptext}"
+ if args[:options].kind_of?(Array)
+ args[:options].each do |val|
+ _option val, value: val unless args[:values].include?(val)
+ end
+ elsif args[:options].kind_of?(Hash)
+ args[:options].each do |val, disp|
+ _option disp, value: val unless args[:values].include?(val)
end
end
end