[LON-CAPA-cvs] cvs: loncom /homework inputtags.pm response.pm /homework/caparesponse caparesponse.pm

raeburn raeburn at source.lon-capa.org
Thu Oct 29 23:49:55 EDT 2015


raeburn		Fri Oct 30 03:49:55 2015 EDT

  Modified files:              
    /loncom/homework	inputtags.pm response.pm 
    /loncom/homework/caparesponse	caparesponse.pm 
  Log:
  - Bug 6802: support Math Previewer for all textboxes in formularesponse
    with multiple answers.
    - Move &edit_mathresponse_button() from response.pm to inputtags.pm
    - Use HWVAL_$input_id instead of HWVAL_$partid_$responseid as unique
      id attribute for each <input> tag created by a LON-CAPA <textline />.
  
  
-------------- next part --------------
Index: loncom/homework/inputtags.pm
diff -u loncom/homework/inputtags.pm:1.337 loncom/homework/inputtags.pm:1.338
--- loncom/homework/inputtags.pm:1.337	Mon Oct  5 02:35:40 2015
+++ loncom/homework/inputtags.pm	Fri Oct 30 03:49:47 2015
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # input  definitons
 #
-# $Id: inputtags.pm,v 1.337 2015/10/05 02:35:40 raeburn Exp $
+# $Id: inputtags.pm,v 1.338 2015/10/30 03:49:47 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -460,17 +460,23 @@
 		}
 		my $name = 'HWVAL_'.$id;
                 my $itemid = 'HWVAL_'.$partid.'_'.$id;
+                my $input_tag_id = 'HWVAL_'.$input_id;
 		if ($Apache::inputtags::status[-1] eq 'CANNOT_ANSWER') {
 		    $name = "none";
 		}
 		$result.= '<input onkeydown="javascript:setSubmittedPart(\''.$partid.'\');"'
-		     . ' onfocus="javascript:disableAutoComplete(\''.$itemid.'\');"'
+		     . ' onfocus="javascript:disableAutoComplete(\''.$input_tag_id.'\');"'
 		     . ' type="text" '.$readonly.' name="'. $name . '"'
-		     . ' id="' . $itemid . '"'
+		     . ' id="' . $input_tag_id . '"'
 		     . ' value="'.  $oldresponse.'"'
 		     . ' class="LC_textline spellchecked"  size="'.$size.'"'.$maxlength.' />';
 
 		$result .= &spellcheck_onblur($itemid, $spellcheck);
+                if (($Apache::inputtags::status['-1'] eq 'CAN_ANSWER') &&
+                    (($tagstack->[-2] eq 'formularesponse') || ($tagstack->[-2] eq 'mathresponse')) &&
+                    (&Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.turnoffeditor') ne 'yes')) {
+                    $result.=&edit_mathresponse_button($input_tag_id);
+                }
 	    }
 	    if ($Apache::lonhomework::type eq 'exam'
 		&& &needs_exam_box($tagstack)) {
@@ -1914,6 +1920,118 @@
     return \@spelllangs;
 }
 
+sub edit_mathresponse_button {
+    my ($field) = @_;
+    my $eqneditor = 'lcmath';
+    if ($env{'browser.type'} eq 'safari') {
+        if ($env{'browser.os'} eq 'mac') {
+            my ($prefix,$version) = ($env{'browser.version'} =~ /^(\d*)(\d{3})\./);
+            if ($env{'browser.mobile'}) {
+                if (($version < 531) || (($prefix eq '') && ($version < 533))) {
+                    $eqneditor = '';
+                }
+            } elsif ($version < 533) {
+                $eqneditor = 'dragmath';
+            }
+        } elsif ($env{'browser.os'} eq 'win') {
+            if ($env{'browser.version'} < 533) {
+                $eqneditor = 'dragmath';
+            }
+        }
+    } elsif ($env{'browser.type'} eq 'explorer') {
+        if ($env{'browser.version'} < 9) {
+            $eqneditor = 'dragmath';
+        }
+    } elsif ($env{'browser.type'} eq 'mozilla') {
+        if ($env{'browser.version'} < 5) {
+            $eqneditor = 'dragmath';
+        } else {
+            if ($env{'browser.info'} =~ /^firefox\-([\d\.]+)/) {
+                my $firefox = $1;
+                if ($firefox < 4) {
+                    $eqneditor = 'dragmath';
+                }
+            }
+        }
+    } elsif ($env{'browser.type'} eq 'chrome') {
+        if ($env{'browser.version'} < 5) {
+            $eqneditor = 'dragmath';
+        }
+    } elsif ($env{'browser.type'} eq 'opera') {
+        if ($env{'browser.version'} < 12) {
+            $eqneditor = 'dragmath';
+        }
+    }
+    if ($eqneditor eq 'lcmath') {
+        if (($env{'request.course.id'}) && ($env{'request.state'} ne 'construct')) {
+            if (exists($env{'course.'.$env{'request.course.id'}.'.uselcmath'})) {
+                if ($env{'course.'.$env{'request.course.id'}.'.uselcmath'} eq '0') {
+                    $eqneditor = 'dragmath';
+                }
+            } else {
+                my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});
+                if ($domdefs{'uselcmath'} eq '0') {
+                    $eqneditor = 'dragmath';
+                }
+            }
+        } else {
+            my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});
+            if ($domdefs{'uselcmath'} eq '0') {
+                $eqneditor = 'dragmath';
+            }
+        }
+    }
+    if ($eqneditor eq 'dragmath') {
+        # DragMath applet
+        my $button=&mt('Edit Answer');
+#       my $helplink=&Apache::loncommon::help_open_topic('Formula_Editor');
+        my $iconpath=$Apache::lonnet::perlvar{'lonIconsURL'};
+        return(<<ENDFORMULABUTTON);
+<script type="text/javascript" language="JavaScript">
+function LC_mathedit_${field} (LCtextline) {
+    thenumber = LCtextline;
+    var thedata = '';
+    if (document.getElementById(LCtextline)) {
+        thedata = document.getElementById(LCtextline).value;
+    }
+    newwin = window.open("/adm/dragmath/MaximaPopup.html","","width=565,height=400,resizable");
+}
+</script>
+<a href="javascript:LC_mathedit_${field}('${field}');void(0);"><img class="stift" src="$iconpath/stift.gif" alt="$button" title="$button" /></a>
+ENDFORMULABUTTON
+    } elsif ($eqneditor eq 'lcmath') {
+        # LON-CAPA math equation editor
+        my $mathjaxjs;
+        unless (lc(&Apache::lontexconvert::tex_engine()) eq 'mathjax') {
+            $mathjaxjs = <<"MATHJAX_SCRIPT";
+var mathjaxscript = document.createElement("script");
+    mathjaxscript.type = "text/javascript";
+    mathjaxscript.src = "/adm/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
+    document.body.appendChild(mathjaxscript);
+MATHJAX_SCRIPT
+        }
+        return(<<EQ_EDITOR_SCRIPT);
+<script type="text/javascript">
+  var LCmathField = document.getElementById('${field}');
+  LCmathField.className += ' math'; // note the space
+  LCmathField.setAttribute('data-implicit_operators', 'true');
+  var LCMATH_started;
+  if (typeof LCMATH_started === 'undefined') {
+    $mathjaxjs
+    LCMATH_started = true;
+    var script = document.createElement("script");
+    script.type = "text/javascript";
+    script.src = "/adm/LC_math_editor/LC_math_editor.min.js";
+    document.body.appendChild(script);
+    window.addEventListener('load', function(e) {
+        LCMATH.initEditors();
+    }, false);
+  }
+</script>
+EQ_EDITOR_SCRIPT
+    }
+}
+
 1;
 __END__
 
Index: loncom/homework/response.pm
diff -u loncom/homework/response.pm:1.243 loncom/homework/response.pm:1.244
--- loncom/homework/response.pm:1.243	Mon Mar  9 16:19:54 2015
+++ loncom/homework/response.pm	Fri Oct 30 03:49:47 2015
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # various response type definitons response definition
 #
-# $Id: response.pm,v 1.243 2015/03/09 16:19:54 raeburn Exp $
+# $Id: response.pm,v 1.244 2015/10/30 03:49:47 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -513,6 +513,9 @@
 	    &Apache::lonhomework::set_bubble_lines();
 	}
     }
+    if ($target eq 'web') {
+        &setup_prior_tries_hash(\&format_prior_response_math);
+    }
     pop(@Apache::lonxml::namespace);
     pop(@Apache::response::custom_answer);
     pop(@Apache::response::custom_answer_type);
@@ -575,119 +578,6 @@
     return $result;
 }
 
-sub edit_mathresponse_button {
-    my ($partid,$id)=@_;
-    my $field = 'HWVAL_'.$partid.'_'.$id;
-    my $eqneditor = 'lcmath';
-    if ($env{'browser.type'} eq 'safari') {
-        if ($env{'browser.os'} eq 'mac') {
-            my ($prefix,$version) = ($env{'browser.version'} =~ /^(\d*)(\d{3})\./);
-            if ($env{'browser.mobile'}) {
-                if (($version < 531) || (($prefix eq '') && ($version < 533))) {
-                    $eqneditor = '';
-                }
-            } elsif ($version < 533) {
-                $eqneditor = 'dragmath';
-            }
-        } elsif ($env{'browser.os'} eq 'win') {
-            if ($env{'browser.version'} < 533) {
-                $eqneditor = 'dragmath';
-            }
-        }
-    } elsif ($env{'browser.type'} eq 'explorer') {
-        if ($env{'browser.version'} < 9) {
-            $eqneditor = 'dragmath';
-        }
-    } elsif ($env{'browser.type'} eq 'mozilla') {
-        if ($env{'browser.version'} < 5) {
-            $eqneditor = 'dragmath';
-        } else {
-            if ($env{'browser.info'} =~ /^firefox\-([\d\.]+)/) {
-                my $firefox = $1;
-                if ($firefox < 4) {
-                    $eqneditor = 'dragmath';
-                }
-            }
-        }
-    } elsif ($env{'browser.type'} eq 'chrome') {
-        if ($env{'browser.version'} < 5) {
-            $eqneditor = 'dragmath';
-        }
-    } elsif ($env{'browser.type'} eq 'opera') {
-        if ($env{'browser.version'} < 12) {
-            $eqneditor = 'dragmath';
-        }
-    }
-    if ($eqneditor eq 'lcmath') {
-        if (($env{'request.course.id'}) && ($env{'request.state'} ne 'construct')) {
-            if (exists($env{'course.'.$env{'request.course.id'}.'.uselcmath'})) {
-                if ($env{'course.'.$env{'request.course.id'}.'.uselcmath'} eq '0') {
-                    $eqneditor = 'dragmath';
-                }
-            } else {
-                my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});
-                if ($domdefs{'uselcmath'} eq '0') {
-                    $eqneditor = 'dragmath';
-                }
-            }
-        } else {
-            my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});
-            if ($domdefs{'uselcmath'} eq '0') {
-                $eqneditor = 'dragmath';
-            }
-        }
-    }
-    if ($eqneditor eq 'dragmath') {
-        # DragMath applet
-        my $button=&mt('Edit Answer');
-#       my $helplink=&Apache::loncommon::help_open_topic('Formula_Editor');
-        my $iconpath=$Apache::lonnet::perlvar{'lonIconsURL'};
-        return(<<ENDFORMULABUTTON);
-<script type="text/javascript" language="JavaScript">
-function LC_mathedit_${field} (LCtextline) {
-    thenumber = LCtextline;
-    var thedata = '';
-    if (document.getElementById(LCtextline)) {
-        thedata = document.getElementById(LCtextline).value;
-    }
-    newwin = window.open("/adm/dragmath/MaximaPopup.html","","width=565,height=400,resizable");
-}
-</script>
-<a href="javascript:LC_mathedit_${field}('${field}');void(0);"><img class="stift" src="$iconpath/stift.gif" alt="$button" title="$button" /></a>
-ENDFORMULABUTTON
-    } elsif ($eqneditor eq 'lcmath') {
-        # LON-CAPA math equation editor
-        my $mathjaxjs;
-        unless (lc(&Apache::lontexconvert::tex_engine()) eq 'mathjax') {
-            $mathjaxjs = <<"MATHJAX_SCRIPT";
-var mathjaxscript = document.createElement("script");
-    mathjaxscript.type = "text/javascript";
-    mathjaxscript.src = "/adm/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
-    document.body.appendChild(mathjaxscript);
-MATHJAX_SCRIPT
-        }
-        return(<<EQ_EDITOR_SCRIPT);
-<script type="text/javascript">
-  var LCmathField = document.getElementById('${field}');
-  LCmathField.className += ' math'; // note the space
-  LCmathField.setAttribute('data-implicit_operators', 'true');
-  var LCMATH_started;
-  if (typeof LCMATH_started === 'undefined') {
-    $mathjaxjs
-    LCMATH_started = true;
-    var script = document.createElement("script");
-    script.type = "text/javascript";
-    script.src = "/adm/LC_math_editor/LC_math_editor.min.js";
-    document.body.appendChild(script);
-    window.addEventListener('load', function(e) {
-        LCMATH.initEditors();
-    }, false);
-  }
-</script>
-EQ_EDITOR_SCRIPT
-    }
-}
-
 sub end_mathresponse {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result;
@@ -742,15 +632,6 @@
 	    }
 	}
     }
-    if ($target eq 'web') {
-	&setup_prior_tries_hash(\&format_prior_response_math);
-        my $partid = $Apache::inputtags::part;
-        my $id = $Apache::inputtags::response[-1];
-        if (($Apache::inputtags::status['-1'] eq 'CAN_ANSWER')
-           && (&Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.turnoffeditor') ne 'yes')) {
-            $result.=&edit_mathresponse_button($partid,$id);
-        }
-    }
 
     pop(@Apache::lonxml::namespace);
     pop(@Apache::response::custom_answer);
Index: loncom/homework/caparesponse/caparesponse.pm
diff -u loncom/homework/caparesponse/caparesponse.pm:1.255 loncom/homework/caparesponse/caparesponse.pm:1.256
--- loncom/homework/caparesponse/caparesponse.pm:1.255	Tue Dec 30 20:03:15 2014
+++ loncom/homework/caparesponse/caparesponse.pm	Fri Oct 30 03:49:55 2015
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # caparesponse definition
 #
-# $Id: caparesponse.pm,v 1.255 2014/12/30 20:03:15 raeburn Exp $
+# $Id: caparesponse.pm,v 1.256 2015/10/30 03:49:55 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -642,12 +642,7 @@
 		}
 	    }
 	}
-        if (($target eq 'web') && ($tag eq 'formularesponse')
-            && ($Apache::lonhomework::type ne 'exam') && ($Apache::inputtags::status['-1'] eq 'CAN_ANSWER')
-	    && (&Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.turnoffeditor') ne 'yes')) {
-            $result.=&Apache::response::edit_mathresponse_button($partid,$id);
-        }
-            
+
 	&Apache::response::setup_prior_tries_hash(\&format_prior_response_numerical);
     } elsif ($target eq 'edit') {
 	$result.='</td></tr>'.&Apache::edit::end_table;


More information about the LON-CAPA-cvs mailing list