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

Reply via email to