@@ -24,13 +24,16 @@ FormatRenderedProblem.pm
24
24
25
25
package RenderApp::Controller::FormatRenderedProblem ;
26
26
27
+ use warnings;
28
+ use strict;
29
+
27
30
use lib " $WeBWorK::Constants::WEBWORK_DIRECTORY /lib" ;
28
31
use lib " $WeBWorK::Constants::PG_DIRECTORY /lib" ;
29
32
use MIME::Base64 qw( encode_base64 decode_base64) ;
30
33
use WeBWorK::Utils::AttemptsTable; # import from ww2
31
34
use WeBWorK::PG::ImageGenerator; # import from ww2
32
35
use WeBWorK::Utils::LanguageAndDirection;
33
- use WeBWorK::Utils qw( wwRound) ; # required for score summary
36
+ use WeBWorK::Utils qw( wwRound getAssetURL ) ; # required for score summary
34
37
use WeBWorK::Localize ; # for maketext
35
38
our $UNIT_TESTS_ON = 0;
36
39
@@ -46,7 +49,7 @@ sub format_hash_ref {
46
49
sub new {
47
50
my $invocant = shift ;
48
51
my $class = ref $invocant || $invocant ;
49
- $self = { # Is this function redundant given the declarations within sub formatRenderedProblem?
52
+ my $self = { # Is this function redundant given the declarations within sub formatRenderedProblem?
50
53
return_object => {},
51
54
encoded_source => {},
52
55
sourceFilePath => ' ' ,
@@ -199,7 +202,7 @@ sub formatRenderedProblem {
199
202
answersSubmitted => $self -> {inputs_ref }{answersSubmitted }//0,
200
203
answerOrder => $answerOrder //[],
201
204
displayMode => $self -> {inputs_ref }{displayMode },
202
- imgGen => $imgGen ,
205
+ imgGen => undef , # $imgGen,
203
206
ce => ' ' , # used only to build the imgGen
204
207
showAnswerNumbers => 0,
205
208
showAttemptAnswers => 0,
@@ -242,45 +245,47 @@ sub formatRenderedProblem {
242
245
243
246
# Add JS files requested by problems via ADD_JS_FILE() in the PG file.
244
247
my $extra_js_files = ' ' ;
245
- if (ref ($rh_result -> {flags }{extra_js_files }) eq " ARRAY" ) {
248
+ if (ref ($rh_result -> {flags }{extra_js_files }) eq ' ARRAY' ) {
246
249
$rh_result -> {js } = [];
247
250
my %jsFiles ;
248
- for (@{$rh_result -> {flags }{extra_js_files }}) {
249
- # Avoid duplicates
250
- next if $jsFiles {$_ -> {file }};
251
- $jsFiles {$_ -> {file }} = 1;
252
- my $attributes = ref ($_ -> {attributes }) eq " HASH" ? $_ -> {attributes } : {};
251
+ for (@{ $rh_result -> {flags }{extra_js_files } }) {
252
+ next if $jsFiles { $_ -> {file } };
253
+ $jsFiles { $_ -> {file } } = 1;
254
+ my %attributes = ref ($_ -> {attributes }) eq ' HASH' ? %{ $_ -> {attributes } } : ();
253
255
if ($_ -> {external }) {
254
- push @{$rh_result -> {js }}, $_ -> {file };
255
- $extra_js_files .= CGI::script({ src => $_ -> {file }, %$attributes }, ' ' );
256
- } elsif (!$_ -> {external } && -f " $ENV {WEBWORK_ROOT}/htdocs/$_ ->{file}" ) {
257
- push @{$rh_result -> {js }}, " $webwork_htdocs_url /$_ ->{file}" ;
258
- $extra_js_files .= CGI::script({src => " $webwork_htdocs_url /$_ ->{file}" , %$attributes }, ' ' );
256
+ push @{ $rh_result -> {js } }, $_ -> {file };
257
+ $extra_js_files .= CGI::script({ src => $_ -> {file }, %attributes }, ' ' );
259
258
} else {
260
- $extra_js_files .= " <!-- $_ ->{file} is not available in htdocs/ on this server -->" ;
259
+ my $url = getAssetURL($self -> {inputs_ref }{language } // ' en' , $_ -> {file });
260
+ push @{ $rh_result -> {js } }, $SITE_URL .$url ;
261
+ $extra_js_files .= CGI::script({ src => $url , %attributes }, ' ' );
261
262
}
262
263
}
263
264
}
264
265
266
+ # Add CSS files requested by problems via ADD_CSS_FILE() in the PG file
267
+ # or via a setting of $self->{ce}{pg}{specialPGEnvironmentVars}{extra_css_files}
268
+ # (the value should be an anonomous array).
265
269
my $extra_css_files = ' ' ;
266
- my %cssFiles ;
267
- # Avoid duplicates
268
- if (ref ($self -> {ce }{pg }{specialPGEnvironmentVars }{extra_css_files }) eq " ARRAY" ) {
269
- $cssFiles {$_ } = 0 for @{$self -> {ce }{pg }{specialPGEnvironmentVars }{extra_css_files }};
270
+ my @cssFiles ;
271
+ if (ref ($self -> {ce }{pg }{specialPGEnvironmentVars }{extra_css_files }) eq ' ARRAY' ) {
272
+ push (@cssFiles , { file => $_ , external => 0 }) for @{ $self -> {ce }{pg }{specialPGEnvironmentVars }{extra_css_files } };
270
273
}
271
- if (ref ($rh_result -> {flags }{extra_css_files }) eq " ARRAY" ) {
272
- $ cssFiles{ $_ -> { file }} = $_ -> { external } for @{ $rh_result -> {flags }{extra_css_files }};
274
+ if (ref ($rh_result -> {flags }{extra_css_files }) eq ' ARRAY' ) {
275
+ push @ cssFiles, @{ $rh_result -> {flags }{extra_css_files } };
273
276
}
277
+ my %cssFilesAdded ; # Used to avoid duplicates
274
278
$rh_result -> {css } = [];
275
- for (keys (%cssFiles )) {
276
- if ($cssFiles {$_ }) {
277
- push @{$rh_result -> {css }}, $_ ;
278
- $extra_css_files .= " <link rel=\" stylesheet\" type=\" text/css\" href=\" $_ \" />\n " ;
279
- } elsif (!$cssFiles {$_ } && -f " $ENV {WEBWORK_ROOT}/htdocs/$_ " ) {
280
- push @{$rh_result -> {css }}, " $webwork_htdocs_url /$_ " ;
281
- $extra_css_files .= " <link rel=\" stylesheet\" type=\" text/css\" href=\" $webwork_htdocs_url /$_ \" />\n " ;
279
+ for (@cssFiles ) {
280
+ next if $cssFilesAdded { $_ -> {file } };
281
+ $cssFilesAdded { $_ -> {file } } = 1;
282
+ if ($_ -> {external }) {
283
+ push @{ $rh_result -> {css } }, $_ -> {file };
284
+ $extra_css_files .= CGI::Link({ rel => ' stylesheet' , href => $_ -> {file } });
282
285
} else {
283
- $extra_css_files .= " <!-- $_ is not available in htdocs/ on this server -->\n " ;
286
+ my $url = getAssetURL($self -> {inputs_ref }{language } // ' en' , $_ -> {file });
287
+ push @{ $rh_result -> {css } }, $SITE_URL .$url ;
288
+ $extra_css_files .= CGI::Link({ href => $url , rel => ' stylesheet' });
284
289
}
285
290
}
286
291
0 commit comments