--- loncom/homework/chemresponse.pm 2017/01/04 20:09:08 1.99 +++ loncom/homework/chemresponse.pm 2025/01/27 18:43:23 1.103 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # chemical equation style response # -# $Id: chemresponse.pm,v 1.99 2017/01/04 20:09:08 damieng Exp $ +# $Id: chemresponse.pm,v 1.103 2025/01/27 18:43:23 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -199,7 +199,7 @@ RESIZEJS function jsmeOnLoad() { document.getElementById('JMErefresh').style.display="none"; document.getElementById('JMEcredits').style.display="inline"; - jsmeApplet = new JSApplet.JSME("jme", "420px", "330px"); + jsmeApplet = new JSApplet.JSME("jme", "420px", "330px", {"options" : "$options"}); document.JME = jsmeApplet; $molecule; document.getElementById('JMEbuttons').style.display="block"; @@ -217,7 +217,7 @@ function submitSmiles() { } } function openHelpWindow() { - window.open("http://peter-ertl.com/jsme/2013_03/help.html","","scrollbars=yes,resizable=yes,width=500,height=600"); + window.open("https://jsme-editor.github.io/help.html","","scrollbars=yes,resizable=yes,width=500,height=600"); } @@ -558,10 +558,15 @@ sub start_organicstructure { my $width=&Apache::lonxml::get_param('width',$parstack,$safeeval); my $molecule=&Apache::lonxml::get_param('molecule',$parstack,$safeeval); my $options=&Apache::lonxml::get_param('options',$parstack,$safeeval); + my $alttext=&Apache::lonxml::get_param('alt',$parstack,$safeeval); + if ($alttext eq '') { + $alttext = &mt('Organic structure'); + } + $alttext = &HTML::Entities::encode($alttext,'<>&"'); my $id=&Apache::loncommon::get_cgi_id(); $result="'; &Apache::lonnet::appenv( {'cgi.'.$id.'.JME' => &escape($molecule), 'cgi.'.$id.'.PNG' => 1, @@ -610,12 +615,14 @@ sub start_organicstructure { [ ['reaction','Is a reaction'], ['border','Draw a border'] ], $token); + $result .= '
'.&Apache::edit::text_arg('Alt text in JME img tag:','alt',$token,30). + ' ('.&mt('student-viewable in HTML source').')'; $result .=&Apache::edit::end_row(); } elsif ($target eq 'modified') { my $constructtag=&Apache::edit::get_new_args($token,$parstack, $safeeval,'molecule', 'width','texwidth', - 'options'); + 'options','alt'); if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } } return $result; @@ -630,6 +637,40 @@ sub end_organicstructure { return $result; } +sub edit_reaction_button { + my ($id,$field,$reaction)=@_; + my $id_es=&escape($id); + my $field_es=&escape($field); + my $reaction_es=&escape($reaction); + my $docopen=&Apache::lonhtmlcommon::javascript_docopen(); + my $iconpath=$Apache::lonnet::perlvar{'lonIconsURL'}; + my $display=&mt('Edit Answer'); + my $start_page = + &Apache::loncommon::start_page('LON-CAPA Reaction Editor',undef, + {'frameset' => 1, + 'js_ready' => 1, + 'add_entries' => { + 'rows' => "30%,*", + 'border' => "0",}},); + my $end_page = + &Apache::loncommon::end_page({'frameset' => 1, + 'js_ready' => 1}); + my $result=< +// + +$display +EDITREACTION + return $result; +} + sub reaction_preview { my ($field, $reaction) = @_; @@ -682,11 +723,20 @@ sub start_reactionresponse { $safeeval); $result .=''. &Apache::edit::text_arg('Answer:','answer',$token,40); - $result .= &reaction_preview(&Apache::edit::html_element_name('answer'), $answer).''; + my $inline_chem = &use_inline_chem(); + if ($inline_chem) { + $result .= &reaction_preview(&Apache::edit::html_element_name('answer'), $answer).''; + } else { + $result .=&edit_reaction_button($id,&Apache::edit::html_element_name('answer'),$answer).''; + } my $initial=&Apache::lonxml::get_param('initial',$parstack,$safeeval); $result.=''. &Apache::edit::text_arg('Initial Reaction:','initial',$token,40); - $result .= &reaction_preview(&Apache::edit::html_element_name('initial'), $initial).''; + if ($inline_chem) { + $result .= &reaction_preview(&Apache::edit::html_element_name('initial'), $initial).''; + } else { + $result .=&edit_reaction_button($id,&Apache::edit::html_element_name('initial'),$initial).''; + } $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row(); } elsif ($target eq 'modified') { my $constructtag=&Apache::edit::get_new_args($token,$parstack, @@ -774,12 +824,38 @@ sub end_reactionresponse { if (($target eq 'web') && ($Apache::lonhomework::type ne 'exam') && ($status eq 'CAN_ANSWER')) { my $reaction=$Apache::lonhomework::history{"resource.$partid.$id.submission"}; if ($reaction eq '') { $reaction=&Apache::lonxml::get_param('initial',$parstack,$safeeval); } - $result .= &reaction_preview("HWVAL_$id", $reaction); + if (&use_inline_chem()) { + $result .= &reaction_preview("HWVAL_$id", $reaction); + } else { + $result.=&edit_reaction_button($id,"HWVAL_$id",$reaction); + } } &Apache::response::end_response(); return $result; } +sub use_inline_chem { + my $inline_chem = 1; + if (($env{'request.course.id'}) && ($env{'request.state'} ne 'construct')) { + if (exists($env{'course.'.$env{'request.course.id'}.'.inline_chem'})) { + if ($env{'course.'.$env{'request.course.id'}.'.inline_chem'} eq '0') { + $inline_chem = 0; + } + } else { + my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'}); + if ($domdefs{'inline_chem'} eq '0') { + $inline_chem = 0; + } + } + } else { + my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'}); + if ($domdefs{'inline_chem'} eq '0') { + $inline_chem = 0; + } + } + return $inline_chem; +} + sub format_prior_response_reaction { my ($mode,$answer) =@_; return ''.