[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
SF.net SVN: ledger-smb: [1609] trunk/LedgerSMB/Template/Elements.pm
- Subject: SF.net SVN: ledger-smb: [1609] trunk/LedgerSMB/Template/Elements.pm
- From: ..hidden..
- Date: Fri, 14 Sep 2007 22:54:14 -0700
Revision: 1609
http://ledger-smb.svn.sourceforge.net/ledger-smb/?rev=1609&view=rev
Author: einhverfr
Date: 2007-09-14 22:54:14 -0700 (Fri, 14 Sep 2007)
Log Message:
-----------
Adding Template Element Generators from Hunmonk
Added Paths:
-----------
trunk/LedgerSMB/Template/Elements.pm
Added: trunk/LedgerSMB/Template/Elements.pm
===================================================================
--- trunk/LedgerSMB/Template/Elements.pm (rev 0)
+++ trunk/LedgerSMB/Template/Elements.pm 2007-09-15 05:54:14 UTC (rev 1609)
@@ -0,0 +1,168 @@
+=head1 NAME
+
+LedgerSMB::Template::Elements: Template Utility Functions
+
+=head1 SYNOPSIS
+
+Provides utility functions for generating elements for the user interface
+templates
+
+=head1 METHODS
+
+=over
+
+=item $object->generate_hidden_elements([...]);
+
+Builds data structure for hidden form fields. Values from the
+$form object are run through $form->quote.
+
+Sample data structure added to $form->hidden_elements():
+
+ $self->{form_elements}{hidden_elements} = [{ type => 'hidden', name => 'foo', value => 'bar'... } ...]
+
+A reference to this structure is returned as well.
+
+=back
+
+=cut
+
+package LedgerSMB::Template::Element;
+use strict;
+
+sub generate_hidden_elements {
+ my $self = shift;
+
+ if (! $self->{form_elements}{hidden_elements} ) {
+ $self->{form_elements}{hidden_elements} = [];
+ }
+
+ for (@_) {
+ my $value = defined($self->{$_}) ? $self->quote( $self->{$_} ) : '';
+ push @{$self->{form_elements}{hidden_elements}}, { type => 'hidden', name => $_, value => $value };
+ }
+ return $self->{form_elements}{hidden_elements};
+}
+
+=over
+
+=item $form->generate_radio_elements($radios);
+
+Roll out a single radios hash to an array of radio elements,
+using the values array as index.
+
+Sample data structure added to $form->generate_radio_elements($radios):
+
+my $radios = {
+ name => 'radio_name',
+ class => 'radio',
+ attributes => { foo => 'bar' },
+ values => [ '1', '2', '3'],
+ labels => [ 'Label one', '', 'Label three'],
+};
+
+=back
+
+=cut
+
+sub generate_radio_elements {
+
+ my $self = shift;
+ my $radios = shift;
+
+ my $elements = [];
+ my $i = 0;
+
+ # One new radio element for each listed value.
+ foreach my $radio_value ( @{$radios->{values}} ) {
+ my $element = {};
+
+ # copy all additional attributes
+ while ( my ($key, $value) = each(%$radios) ) {
+ if ( $key !~ /^(values|labels|id|value)$/ ) {
+ $element->{$key} = $value;
+ }
+ }
+ $element->{id} = $radios->{name} .'-'. $radio_value;
+
+ # id tags with only numbers, letters, and dashes -- nicer CSS.
+ $element->{id} =~ s/[^\p{IsAlnum}]/-/g;
+ $element->{value} = $radio_value;
+ $element->{type} = 'radio';
+
+ # Add label key if present for this element.
+
+ if ( $radios->{labels}[$i] ) {
+ $element->{label} = $radios->{labels}[$i];
+ }
+ push @$elements, $element;
+ $i++;
+ }
+
+ return $elements;
+}
+
+=over
+
+=item $form->generate_checkbox_elements($checkboxes);
+
+Roll out a single checkboxes hash to an array of checkbox elements,
+using the names array as index. Note that if no 'values' array
+is passed, value for all checkboxes default to 1.
+
+Sample data structure added to $form->generate_checkbox_elements($checkboxes):
+
+my $checkboxes = {
+ names => [
+ 'checkbox_name1',
+ 'checkbox_name2',
+ 'checkbox_name3',
+ ],
+ class => 'checkbox',
+ attributes => { foo => 'bar' },
+ values => [ '4', '', '3'],
+ labels => [ 'Label one', '', 'Label three'],
+
+};
+
+=back
+
+=cut
+
+sub generate_checkbox_elements {
+
+ my $self = shift;
+ my $checkboxes = shift;
+
+ my $elements = [];
+ my $i = 0;
+
+ # One new checkbox element for each listed name.
+ foreach my $checkbox_name ( @{$checkboxes->{names}} ) {
+ my $element = {};
+
+ # Additional attributes
+ while ( my ($key, $value) = each(%$checkboxes) ) {
+ if ( $key !~ /^(names|values|labels|id|value|name)$/ ) {
+ $element->{$key} = $value;
+ }
+ }
+ # Value defaults to 1 if not passed for this element.
+
+ $element->{value} = defined($checkboxes->{values}[$i])
+ ? $checkboxes->{values}[$i]
+ : '1';
+ $element->{name} = $checkbox_name;
+ $element->{id} = $element->{name};
+ # id tags with only numbers, letters, and dashes -- nicer CSS.
+ $element->{id} =~ s/[^\p{IsAlnum}]/-/g;
+ $element->{type} = 'checkbox';
+ # Add label key if present for this element.
+ if ( $checkboxes->{labels}[$i] ) {
+ $element->{label} = $checkboxes->{labels}[$i];
+ }
+ push @$elements, $element;
+ $i++;
+ }
+
+ return $elements;
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.