[LON-CAPA-cvs] cvs: loncom(BZ4492) /homework radiobuttonresponse.pm
foxr
foxr at source.lon-capa.org
Mon Jan 23 07:00:13 EST 2012
foxr Mon Jan 23 12:00:13 2012 EDT
Modified files: (Branch: BZ4492)
/loncom/homework radiobuttonresponse.pm
Log:
BZ 4492 More refactoring prior to implementing latex direction rendering
selection.
-------------- next part --------------
Index: loncom/homework/radiobuttonresponse.pm
diff -u loncom/homework/radiobuttonresponse.pm:1.153.6.3 loncom/homework/radiobuttonresponse.pm:1.153.6.4
--- loncom/homework/radiobuttonresponse.pm:1.153.6.3 Sat Jan 21 21:40:41 2012
+++ loncom/homework/radiobuttonresponse.pm Mon Jan 23 12:00:13 2012
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# mutliple choice style responses
#
-# $Id: radiobuttonresponse.pm,v 1.153.6.3 2012/01/21 21:40:41 foxr Exp $
+# $Id: radiobuttonresponse.pm,v 1.153.6.4 2012/01/23 12:00:13 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -121,14 +121,7 @@
else {
$result .= ' \renewcommand{\labelenumi}{\Alph{enumi}.}';
}
- if ( $env{'form.pdfFormFields'} eq 'yes'
- && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )
- {
- $result .= '\begin{itemize}';
- }
- else {
- $result .= '\begin{enumerate}';
- }
+
}
elsif ( $target eq 'analyze' ) {
my $part_id = "$Apache::inputtags::part.$id";
@@ -143,16 +136,7 @@
@_;
my $result;
if ( $target eq 'edit' ) { $result = &Apache::edit::end_table(); }
- if ( $target eq 'tex' ) {
- if ( $env{'form.pdfFormFields'} eq 'yes'
- and $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )
- {
- $result .= '\end{itemize}';
- }
- else {
- $result .= '\end{enumerate}';
- }
- }
+
&Apache::response::end_response;
pop @Apache::lonxml::namespace;
&Apache::lonxml::deregister( 'Apache::radiobuttonresponse',
@@ -947,6 +931,108 @@
return $result;
}
+##
+# Display foils in exam mode for latex
+#
+# @param $whichfoils - Reference to an array that contains the foil names to display
+# @param $bubbles_per_line - Number of bubbles on a line.
+#
+# @return string
+# @return the latex rendering of the exam problem.
+#
+# @note The direction is not honored for exams. The lines reflect the number of
+# bubbles on an exam sheet.
+#
+sub display_latex_exam {
+ my ($whichfoils, $bubbles_per_line) = @_;
+ my $result;
+ my $numlines;
+ my $bubble_number = 0;
+ my $line = 0;
+ my $i = 0;
+
+ # This section puts out the prefix that tells the user
+ # (if necessary) to only choose one bubble in the next n lines
+ # for problems with more than one line worth of bubbles in the grid sheet:
+
+ my $numitems = scalar( @{$whichfoils} );
+ $numlines = int( $numitems / $bubbles_per_line );
+ if ( ( $numitems % $bubbles_per_line ) != 0 ) {
+ $numlines++;
+ }
+ if ( $numlines < 1 ) {
+ $numlines = 1;
+ }
+ if ( $numlines > 1 ) {
+ my $linetext;
+ for ( my $i = 0 ; $i < $numlines ; $i++ ) {
+ $linetext .= $Apache::lonxml::counter + $i . ', ';
+ }
+ $linetext =~ s/,\s$//;
+ $result .=
+ '\item[\small {\textbf{'
+ . $linetext . '}}]'
+ . ' {\footnotesize '
+ . &mt( '(Bubble once in [_1] lines)', $numlines )
+ . '} \hspace*{\fill} \\\\';
+ }
+ else {
+ $result .= '\item[\textbf{' . $Apache::lonxml::counter . '}.]';
+ }
+
+ # Now output the bubbles themselves:
+
+ foreach my $name (@{$whichfoils}) {
+ if ( $bubble_number >= $bubbles_per_line ) {
+ $line++;
+ $i = 0;
+ $bubble_number = 0;
+ }
+ my $identifier;
+ if ( $numlines > 1 ) {
+ $identifier = $Apache::lonxml::counter + $line;
+ }
+ $result .=
+ '{\small \textbf{'
+ . $identifier
+ . $alphabet[$i]
+ . '}}$\bigcirc$'
+ . $Apache::response::foilgroup{ $name . '.text' }
+ . '\\\\'; #' stupid emacs -- it thinks it needs that apostrophe to close the quote
+
+ $i++;
+ $bubble_number++;
+ }
+
+ return $result;
+
+}
+
+##
+# Display latex when exam mode is not on.
+#
+# @param $whichfoils - The foils to display
+# @param $direction - Display direction ('horizontal' is what matters to us).
+# @param $vbegin - Begin the vertical environment being used.
+# @param $vend - End the vertical environment being used.
+#
+# @return string
+# @retval - The LaTeX rendering of the resource.'
+#
+sub display_latex {
+ my ($whichfoils, $direction, $vbegin, $vend) = @_;
+ my $result;
+
+ $result .= $vbegin;
+ foreach my $name (@{$whichfoils}) {
+ $result .= '\vspace*{-2 mm}\item '
+ . $Apache::response::foilgroup{ $name . '.text' };
+ }
+
+ $result .= $vend;
+
+ return $result;
+}
##
@@ -957,14 +1043,24 @@
my $part = $Apache::inputtags::part;
my $solved = $Apache::lonhomework::history{"resource.$part.solved"};
+
+ # Show answers html.
+
if ( ( $target ne 'tex' )
&& &Apache::response::show_answer() )
{
$result = &display_foils_html(
$whichfoils, $target, $direction, $part, $solved, 1);
+
+ # other html
+ } elsif ($target ne 'tex') {
+ $result = &display_foils_html($whichfoils, $target, $direction, $part,
+ 0, 0);
+
+ # LaTeX rendering:
+ } else {
- } else {
my $i = 0;
my $bubble_number = 0;
my $line = 0;
@@ -972,100 +1068,74 @@
my $id = $Apache::inputtags::response['-1'];
my $part = $Apache::inputtags::part;
- if ($target ne 'tex') {
- $result = &display_foils_html($whichfoils, $target, $direction, $part,
- 0, 0);
- } else {
+
+
+ my $numlines;
+
+ # Decide how to bracket the list of foils:
+ my $begin_environment;
+ my $end_environment;
- my $numlines;
-
-
-
- # Rendering for latex exams.
+ if ( $env{'form.pdfFormFields'} eq 'yes'
+ && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )
+ {
+ $begin_environment = '\begin{itemize}';
+ $end_environment = '\end{itemize}';
+ }
+ else {
+ $begin_environment = '\begin{enumerate}';
+ $end_environment = '\end{enumerate}';
+ }
+
+ # Rendering for latex exams.
+
+ if ( ( $Apache::lonhomework::type eq 'exam' ) )
+ {
+ $result .= $begin_environment;
+ $result .= &display_latex_exam($whichfoils, $bubbles_per_line);
+ $result .= $end_environment;
+ $result .= '\vskip 0mm ';
- if ( ( $Apache::lonhomework::type eq 'exam' ) )
+ } else {
+
+ # Different rendering for PDF form than for a
+ # 'regular' answer direction is honored in both of those
+ #
+
+ if ( ($env{'form.pdfFormFields'} eq 'yes')
+ && ($Apache::inputtags::status[-1] eq 'CAN_ANSWER'))
{
- my $numitems = scalar( @{$whichfoils} );
- $numlines = int( $numitems / $bubbles_per_line );
- if ( ( $numitems % $bubbles_per_line ) != 0 ) {
- $numlines++;
- }
- if ( $numlines < 1 ) {
- $numlines = 1;
- }
- if ( $numlines > 1 ) {
- my $linetext;
- for ( my $i = 0 ; $i < $numlines ; $i++ ) {
- $linetext .= $Apache::lonxml::counter + $i . ', ';
- }
- $linetext =~ s/,\s$//;
- $result .=
- '\item[\small {\textbf{'
- . $linetext . '}}]'
- . ' {\footnotesize '
- . &mt( '(Bubble once in [_1] lines)', $numlines )
- . '} \hspace*{\fill} \\\\';
- }
- else {
- $result .= '\item[\textbf{' . $Apache::lonxml::counter . '}.]';
- }
- } # tex/exam
-
-
- foreach my $name ( @{$whichfoils} ) {
-
-
- if ( $Apache::lonhomework::type eq 'exam' ) {
- if ( $bubble_number >= $bubbles_per_line ) {
- $line++;
- $i = 0;
- $bubble_number = 0;
- }
- my $identifier;
- if ( $numlines > 1 ) {
- $identifier = $Apache::lonxml::counter + $line;
- }
- $result .=
- '{\small \textbf{'
- . $identifier
- . $alphabet[$i]
- . '}}$\bigcirc$'
+ $result .= $begin_environment;
+ foreach my $name ( @{$whichfoils} ) {
+
+ my $fieldname =
+ $env{'request.symb'}
+ . '&part_'
+ . $Apache::inputtags::part
+ . '&radiobuttonresponse'
+ . '&HWVAL_'
+ . $Apache::inputtags::response['-1'];
+ $result .= '\item[{'
+ . &Apache::lonxml::print_pdf_radiobutton( $fieldname,
+ $temp )
+ . '}]'
. $Apache::response::foilgroup{ $name . '.text' }
- . '\\\\'; #' stupid emacs
- $i++;
- $bubble_number++;
- }
- else {
- if ( $env{'form.pdfFormFields'} eq 'yes'
- && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )
- {
- my $fieldname =
- $env{'request.symb'}
- . '&part_'
- . $Apache::inputtags::part
- . '&radiobuttonresponse'
- . '&HWVAL_'
- . $Apache::inputtags::response['-1'];
- $result .= '\item[{'
- . &Apache::lonxml::print_pdf_radiobutton( $fieldname,
- $temp )
- . '}]'
- . $Apache::response::foilgroup{ $name . '.text' }
- . "\n";
- }
- else {
- $result .= '\vspace*{-2 mm}\item '
- . $Apache::response::foilgroup{ $name . '.text' };
- }
+ . "\n";
+
+ $temp++;
}
-
- $temp++;
- }
- if ($target eq 'tex') {
- $result .= '\vskip 0 mm ';
+ $result .= $end_environment;
+ } else {
+ $result .= &display_latex(
+ $whichfoils, $direction, $begin_environment, $end_environment
+ );
}
+ $result .= '\vskip 0 mm ';
+
}
+
+
}
return $result;
}
More information about the LON-CAPA-cvs
mailing list