start of new widgets for fields
groditi [Mon, 24 Sep 2007 19:28:11 +0000 (19:28 +0000)]
12 files changed:
lib/Reaction/UI/Widget/Field.pm [new file with mode: 0644]
lib/Reaction/UI/Widget/Field/Boolean.pm [new file with mode: 0644]
lib/Reaction/UI/Widget/Field/ChooseMany.pm [new file with mode: 0644]
lib/Reaction/UI/Widget/Field/ChooseOne.pm [new file with mode: 0644]
lib/Reaction/UI/Widget/Field/DateTime.pm [new file with mode: 0644]
lib/Reaction/UI/Widget/Field/File.pm [new file with mode: 0644]
lib/Reaction/UI/Widget/Field/HiddenArray.pm [new file with mode: 0644]
lib/Reaction/UI/Widget/Field/Number.pm [new file with mode: 0644]
lib/Reaction/UI/Widget/Field/Password.pm [new file with mode: 0644]
lib/Reaction/UI/Widget/Field/String.pm [new file with mode: 0644]
lib/Reaction/UI/Widget/Field/Text.pm [new file with mode: 0644]
lib/Reaction/UI/Widget/Field/TimeRange.pm [new file with mode: 0644]

diff --git a/lib/Reaction/UI/Widget/Field.pm b/lib/Reaction/UI/Widget/Field.pm
new file mode 100644 (file)
index 0000000..f3caf3b
--- /dev/null
@@ -0,0 +1,27 @@
+package Reaction::UI::Widget::Field;
+
+use Reaction::UI::WidgetClass;
+
+class Field, which {
+
+  has id   => (isa => 'Str', is => 'ro', lazy_build => 1);
+  has name => (isa => 'Str', is => 'ro', lazy_build => 1);
+
+  implements build_id   => as { shift->viewport->event_id_for('value'); };
+  implements build_name => as { shift->viewport->event_id_for('value'); };
+
+  widget renders [qw/label field message/
+                  => { id       => func('self', 'id'),
+                       name     => func('self', 'name'),
+                       viewport => func('self', 'viewport'),  }
+                 ];
+
+  label   renders [ string { $_{viewport}->label   }, ];
+  message renders [ string { $_{viewport}->message }, ];
+
+  field  renders [ string { $_{viewport}->value },  ];
+
+};
+
+1;
+
diff --git a/lib/Reaction/UI/Widget/Field/Boolean.pm b/lib/Reaction/UI/Widget/Field/Boolean.pm
new file mode 100644 (file)
index 0000000..764b7e0
--- /dev/null
@@ -0,0 +1,36 @@
+package Reaction::UI::Widget::Field::Boolean;
+
+use Reaction::UI::WidgetClass;
+
+class Boolean is 'Reaction::UI::Widget::Field', which {
+
+};
+
+1;
+
+=for layout widget
+
+[% label %] [% field %] [% message %] <br>
+
+=for layout field
+
+<!-- We need a replacement for process_attrs -->
+<input type="checkbox" name="[% name %]" id="[% id %]" />
+  [% content | html %]
+</textarea>
+
+=for layout label
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <label for="[% id %]"> [% content | html %]: </label>
+[% END %]
+
+=for layout message
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <span> [% content | html %] </span>
+[% END %]
+
+=cut
diff --git a/lib/Reaction/UI/Widget/Field/ChooseMany.pm b/lib/Reaction/UI/Widget/Field/ChooseMany.pm
new file mode 100644 (file)
index 0000000..9cfa1f3
--- /dev/null
@@ -0,0 +1,34 @@
+package Reaction::UI::Widget::Field::ChooseMany;
+
+use Reaction::UI::WidgetClass;
+
+class ChooseMany is 'Reaction::UI::Widget::Field', which {
+
+};
+
+1;
+
+
+=for layout widget
+
+[% label %] [% field %] [% message %] <br>
+
+=for layout field
+
+TODO
+
+=for layout label
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <label for="[% id %]"> [% content | html %]: </label>
+[% END %]
+
+=for layout message
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <span> [% content | html %] </span>
+[% END %]
+
+=cut
diff --git a/lib/Reaction/UI/Widget/Field/ChooseOne.pm b/lib/Reaction/UI/Widget/Field/ChooseOne.pm
new file mode 100644 (file)
index 0000000..3a79ea9
--- /dev/null
@@ -0,0 +1,65 @@
+package Reaction::UI::Widget::Field::ChooseOne;
+
+use Reaction::UI::WidgetClass;
+
+class ChooseOne is 'Reaction::UI::Widget::Field', which {
+
+  field  renders [ option over func('viewport', 'values_list') ,
+                   {name_map => func('viewport', 'value_to_name_map') }
+                 ],
+                   { is_required => sub{ $_{viewport}->attribute->required } };
+
+  option renders
+    [
+     { v_value  => sub { $_{viewport}->obj_to_str($_) },
+       v_name   => sub { $_{name_map}->{ $_{viewport}->obj_to_str($_) } },
+       is_selected => sub { my $v_value = $_{viewport}->obj_to_str($_);
+                            $_{viewport}->is_current_value($v_value) ||
+                           $_{viewport}->value eq $v_value;
+                          }
+     }
+    ];
+
+};
+
+1;
+
+=for layout widget
+
+[% label %] [% field %] [% message %] <br>
+
+=for layout field
+
+<!-- We need a replacement for process_attrs -->
+<select name="[% name %]" id="[% id %]">
+  [% IF is_required %]
+  <option value="">--</option>
+  [% content %]
+</select>
+
+=for layout option
+
+  [% IF is_selected;
+       selected = ' selected="selected"';
+     ELSE;
+       selected =  '';
+     END;
+  %]
+  <!-- I should convert this stuff to process_attrs to keep it cleaner -->
+  <option value="[% v_value | html%]" [% selected %]> [% v_name | html %]</option>
+
+=for layout label
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <label for="[% id %]"> [% content | html %]: </label>
+[% END %]
+
+=for layout message
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <span> [% content | html %] </span>
+[% END %]
+
+=cut
diff --git a/lib/Reaction/UI/Widget/Field/DateTime.pm b/lib/Reaction/UI/Widget/Field/DateTime.pm
new file mode 100644 (file)
index 0000000..024c793
--- /dev/null
@@ -0,0 +1,36 @@
+package Reaction::UI::Widget::Field::DateTime;
+
+use Reaction::UI::WidgetClass;
+
+class DateTime is 'Reaction::UI::Widget::Field', which {
+
+  field renders [ string { $_{viewport}->value_string }, ];
+
+};
+
+1;
+
+=for layout widget
+
+[% label %] [% field %] [% message %] <br>
+
+=for layout field
+
+<!-- We need a replacement for process_attrs -->
+<input type="text" name="[% name %]" id="[% id %]" value="[% content | html %]" />
+
+=for layout label
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <label for="[% id %]"> [% content | html %]: </label>
+[% END %]
+
+=for layout message
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <span> [% content | html %] </span>
+[% END %]
+
+=cut
diff --git a/lib/Reaction/UI/Widget/Field/File.pm b/lib/Reaction/UI/Widget/Field/File.pm
new file mode 100644 (file)
index 0000000..0e4d375
--- /dev/null
@@ -0,0 +1,34 @@
+package Reaction::UI::Widget::Field::File;
+
+use Reaction::UI::WidgetClass;
+
+class File is 'Reaction::UI::Widget::Field', which {
+
+};
+
+1;
+
+
+=for layout widget
+
+[% label %] [% field %] [% message %] <br>
+
+=for layout field
+
+TODO
+
+=for layout label
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <label for="[% id %]"> [% content | html %]: </label>
+[% END %]
+
+=for layout message
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <span> [% content | html %] </span>
+[% END %]
+
+=cut
diff --git a/lib/Reaction/UI/Widget/Field/HiddenArray.pm b/lib/Reaction/UI/Widget/Field/HiddenArray.pm
new file mode 100644 (file)
index 0000000..54004de
--- /dev/null
@@ -0,0 +1,34 @@
+package Reaction::UI::Widget::Field::HiddenArray;
+
+use Reaction::UI::WidgetClass;
+
+class HiddenArray is 'Reaction::UI::Widget::Field', which {
+
+};
+
+1;
+
+
+=for layout widget
+
+[% label %] [% field %] [% message %] <br>
+
+=for layout field
+
+TODO
+
+=for layout label
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <label for="[% id %]"> [% content | html %]: </label>
+[% END %]
+
+=for layout message
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <span> [% content | html %] </span>
+[% END %]
+
+=cut
diff --git a/lib/Reaction/UI/Widget/Field/Number.pm b/lib/Reaction/UI/Widget/Field/Number.pm
new file mode 100644 (file)
index 0000000..a2a24c3
--- /dev/null
@@ -0,0 +1,34 @@
+package Reaction::UI::Widget::Field::Number;
+
+use Reaction::UI::WidgetClass;
+
+class Number is 'Reaction::UI::Widget::Field', which {
+
+};
+
+1;
+
+=for layout widget
+
+[% label %] [% field %] [% message %] <br>
+
+=for layout field
+
+<!-- We need a replacement for process_attrs -->
+<input type="text" name="[% name %]" id="[% id %]" value="[% content | html %]" />
+
+=for layout label
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <label for="[% id %]"> [% content | html %]: </label>
+[% END %]
+
+=for layout message
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <span> [% content | html %] </span>
+[% END %]
+
+=cut
diff --git a/lib/Reaction/UI/Widget/Field/Password.pm b/lib/Reaction/UI/Widget/Field/Password.pm
new file mode 100644 (file)
index 0000000..f08fb77
--- /dev/null
@@ -0,0 +1,34 @@
+package Reaction::UI::Widget::Field::Password;
+
+use Reaction::UI::WidgetClass;
+
+class Password is 'Reaction::UI::Widget::Field', which {
+
+};
+
+1;
+
+=for layout widget
+
+[% label %] [% field %] [% message %] <br>
+
+=for layout field
+
+<!-- We need a replacement for process_attrs -->
+<input type="password" name="[% name %]" id="[% id %]" value="[% content | html %]" />
+
+=for layout label
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <label for="[% id %]"> [% content | html %]: </label>
+[% END %]
+
+=for layout message
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <span> [% content | html %] </span>
+[% END %]
+
+=cut
diff --git a/lib/Reaction/UI/Widget/Field/String.pm b/lib/Reaction/UI/Widget/Field/String.pm
new file mode 100644 (file)
index 0000000..99247bc
--- /dev/null
@@ -0,0 +1,34 @@
+package Reaction::UI::Widget::Field::String;
+
+use Reaction::UI::WidgetClass;
+
+class String is 'Reaction::UI::Widget::Field', which {
+
+};
+
+1;
+
+=for layout widget
+
+[% label %] [% field %] [% message %] <br>
+
+=for layout field
+
+<!-- We need a replacement for process_attrs -->
+<input type="text" name="[% name %]" id="[% id %]" value="[% content | html %]" />
+
+=for layout label
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <label for="[% id %]"> [% content | html %]: </label>
+[% END %]
+
+=for layout message
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <span> [% content | html %] </span>
+[% END %]
+
+=cut
diff --git a/lib/Reaction/UI/Widget/Field/Text.pm b/lib/Reaction/UI/Widget/Field/Text.pm
new file mode 100644 (file)
index 0000000..f58cf16
--- /dev/null
@@ -0,0 +1,36 @@
+package Reaction::UI::Widget::Field::Text;
+
+use Reaction::UI::WidgetClass;
+
+class Text is 'Reaction::UI::Widget::Field', which {
+
+};
+
+1;
+
+=for layout widget
+
+[% label %] [% field %] [% message %] <br>
+
+=for layout field
+
+<!-- We need a replacement for process_attrs -->
+<textarea name="[% name %]" id="[% id %]">
+  [% content | html %]
+</textarea>
+
+=for layout label
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <label for="[% id %]"> [% content | html %]: </label>
+[% END %]
+
+=for layout message
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <span> [% content | html %] </span>
+[% END %]
+
+=cut
diff --git a/lib/Reaction/UI/Widget/Field/TimeRange.pm b/lib/Reaction/UI/Widget/Field/TimeRange.pm
new file mode 100644 (file)
index 0000000..6961b6d
--- /dev/null
@@ -0,0 +1,34 @@
+package Reaction::UI::Widget::Field::TimeRange;
+
+use Reaction::UI::WidgetClass;
+
+class TimeRange is 'Reaction::UI::Widget::Field', which {
+
+};
+
+1;
+
+
+=for layout widget
+
+[% label %] [% field %] [% message %] <br>
+
+=for layout field
+
+TODO
+
+=for layout label
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <label for="[% id %]"> [% content | html %]: </label>
+[% END %]
+
+=for layout message
+
+<!-- This conditional goes away when mst comes up with something better -->
+[% IF content %]
+  <span> [% content | html %] </span>
+[% END %]
+
+=cut