[dw-free] Need a way to include a subset of script / CSS files
[commit: http://hg.dwscoalition.org/dw-free/rev/15c9ff5272b1]
http://bugs.dwscoalition.org/show_bug.cgi?id=4065
Pass in parameters to LJ::res_includes so you can optionally choose to not
include js variables and libraries. Add a fragment argument to
DW::Template->render_template which handles inclusion of resources for page
fragments.
Patch by
fu.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=4065
Pass in parameters to LJ::res_includes so you can optionally choose to not
include js variables and libraries. Add a fragment argument to
DW::Template->render_template which handles inclusion of resources for page
fragments.
Patch by
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Files modified:
- cgi-bin/DW/Controller/Entry.pm
- cgi-bin/DW/Template.pm
- cgi-bin/LJ/Web.pm
- views/entry/options.tt
-------------------------------------------------------------------------------- diff -r 5f87391fecc9 -r 15c9ff5272b1 cgi-bin/DW/Controller/Entry.pm --- a/cgi-bin/DW/Controller/Entry.pm Mon Dec 05 22:31:48 2011 +0800 +++ b/cgi-bin/DW/Controller/Entry.pm Mon Dec 05 23:26:21 2011 +0800 @@ -1067,10 +1067,11 @@ my $vars = _options( $rv->{remote} ); $vars->{use_js} = 1; + my $r = DW::Request->get; $r->status( @{$vars->{error_list} || []} ? HTTP_BAD_REQUEST : HTTP_OK ); - return DW::Template->render_template( 'entry/options.tt', $vars, { no_sitescheme => 1 } ); + return DW::Template->render_template( 'entry/options.tt', $vars, { fragment => 1 } ); } sub _load_visible_panels { diff -r 5f87391fecc9 -r 15c9ff5272b1 cgi-bin/DW/Template.pm --- a/cgi-bin/DW/Template.pm Mon Dec 05 22:31:48 2011 +0800 +++ b/cgi-bin/DW/Template.pm Mon Dec 05 23:26:21 2011 +0800 @@ -316,6 +316,12 @@ $r->print( $out ); return $r->OK; + } elsif ( $extra->{fragment} ) { + LJ::set_active_resource_group( "fragment" ); + $out .= LJ::res_includes( nojs => 1, nolib => 1 ); + $r->print( $out ); + + return $r->OK; } elsif ( $scheme->engine eq 'tt' ) { $r->content_type("text/html; charset=utf-8"); $r->print( $class->render_scheme( $scheme, $out, $extra ) ); diff -r 5f87391fecc9 -r 15c9ff5272b1 cgi-bin/LJ/Web.pm --- a/cgi-bin/LJ/Web.pm Mon Dec 05 22:31:48 2011 +0800 +++ b/cgi-bin/LJ/Web.pm Mon Dec 05 23:26:21 2011 +0800 @@ -2484,6 +2484,12 @@ } sub res_includes { + my ( %opts ) = @_; + + my $include_js = ! $opts{nojs}; + my $include_links = ! $opts{nolinks}; + my $include_libs = ! $opts{nolib}; + # TODO: automatic dependencies from external map and/or content of files, # currently it's limited to dependencies on the order you call LJ::need_res(); my $ret = ""; @@ -2505,158 +2511,166 @@ $wstatprefix = $LJ::WSTATPREFIX; } - # find current journal - my $r = DW::Request->get; - my $journal_base = ''; - my $journal = ''; - if ($r) { - my $journalid = $r->note('journalid'); - - my $ju; - $ju = LJ::load_userid($journalid) if $journalid; - - if ($ju) { - $journal_base = $ju->journal_base; - $journal = $ju->{user}; + if ( $include_js ) { + # find current journal + my $r = DW::Request->get; + my $journal_base = ''; + my $journal = ''; + if ($r) { + my $journalid = $r->note('journalid'); + + my $ju; + $ju = LJ::load_userid($journalid) if $journalid; + + if ($ju) { + $journal_base = $ju->journal_base; + $journal = $ju->{user}; + } } + + my $remote = LJ::get_remote(); + my $hasremote = $remote ? 1 : 0; + + # ctxpopup prop + my $ctxpopup_icons = 1; + my $ctxpopup_userhead = 1; + $ctxpopup_icons = 0 if $remote && ! $remote->opt_ctxpopup_icons; + $ctxpopup_userhead = 0 if $remote && ! $remote->opt_ctxpopup_userhead; + + # poll for esn inbox updates? + my $inbox_update_poll = LJ::is_enabled('inbox_update_poll'); + + # are media embeds enabled? + my $embeds_enabled = LJ::is_enabled('embed_module'); + + # esn ajax enabled? + my $esn_async = LJ::is_enabled('esn_ajax'); + + my %site = ( + imgprefix => "$imgprefix", + siteroot => "$siteroot", + statprefix => "$statprefix", + currentJournalBase => "$journal_base", + currentJournal => "$journal", + has_remote => $hasremote, + ctx_popup => ( $ctxpopup_icons || $ctxpopup_userhead ), + ctx_popup_icons => $ctxpopup_icons, + ctx_popup_userhead => $ctxpopup_userhead, + inbox_update_poll => $inbox_update_poll, + media_embed_enabled => $embeds_enabled, + esn_async => $esn_async, + ); + + my $site_params = LJ::js_dumper(\%site); + my $site_param_keys = LJ::js_dumper([keys %site]); + + # include standard JS info + $ret .= qq { + <script type="text/javascript"> + var Site; + if (!Site) + Site = {}; + + var site_p = $site_params; + var site_k = $site_param_keys; + for (var i = 0; site_k.length > i; i++) { + Site[site_k[i]] = site_p[site_k[i]]; + } + </script> + }; } - my $remote = LJ::get_remote(); - my $hasremote = $remote ? 1 : 0; - - # ctxpopup prop - my $ctxpopup_icons = 1; - my $ctxpopup_userhead = 1; - $ctxpopup_icons = 0 if $remote && ! $remote->opt_ctxpopup_icons; - $ctxpopup_userhead = 0 if $remote && ! $remote->opt_ctxpopup_userhead; - - # poll for esn inbox updates? - my $inbox_update_poll = LJ::is_enabled('inbox_update_poll'); - - # are media embeds enabled? - my $embeds_enabled = LJ::is_enabled('embed_module'); - - # esn ajax enabled? - my $esn_async = LJ::is_enabled('esn_ajax'); - - my %site = ( - imgprefix => "$imgprefix", - siteroot => "$siteroot", - statprefix => "$statprefix", - currentJournalBase => "$journal_base", - currentJournal => "$journal", - has_remote => $hasremote, - ctx_popup => ( $ctxpopup_icons || $ctxpopup_userhead ), - ctx_popup_icons => $ctxpopup_icons, - ctx_popup_userhead => $ctxpopup_userhead, - inbox_update_poll => $inbox_update_poll, - media_embed_enabled => $embeds_enabled, - esn_async => $esn_async, - ); - - my $site_params = LJ::js_dumper(\%site); - my $site_param_keys = LJ::js_dumper([keys %site]); - - # include standard JS info - $ret .= qq { - <script type="text/javascript"> - var Site; - if (!Site) - Site = {}; - - var site_p = $site_params; - var site_k = $site_param_keys; - for (var i = 0; site_k.length > i; i++) { - Site[site_k[i]] = site_p[site_k[i]]; - } - </script> - }; - - my $now = time(); - my %list; # type -> []; - my %oldest; # type -> $oldest - my %included = (); - my $add = sub { - my ($type, $what, $modtime) = @_; - - # the same file may have been included twice - # if it was in two different groups and not JS - # so add another check here - next if $included{$what}; - $included{$what} = 1; - - # in the concat-res case, we don't directly append the URL w/ - # the modtime, but rather do one global max modtime at the - # end, which is done later in the tags function. - $what .= "?v=$modtime" unless $do_concat; - - push @{$list{$type} ||= []}, $what; - $oldest{$type} = $modtime if $modtime > ( $oldest{$type} || 0 ); - }; - - foreach my $by_priority ( reverse @LJ::NEEDED_RES ) { - next unless $by_priority; - - foreach my $resrow ( @$by_priority ) { - # determine if this resource is part of the resource group that is active; - # or 'default' if no group explicitly active - my ( $group, $key ) = @$resrow; - next if - $group ne 'all' && - ( ( defined $LJ::ACTIVE_RES_GROUP && $group ne $LJ::ACTIVE_RES_GROUP ) || - ( ! defined $LJ::ACTIVE_RES_GROUP && $group ne 'default' ) ); - - my $path; - my $mtime = _file_modtime($key, $now); - if ($key =~ m!^stc/fck/! || $LJ::FORCE_WSTAT{$key}) { - $path = "w$key"; # wstc/ instead of stc/ - } else { - $path = $key; - } - - # if we want to also include a local version of this file, include that too - if (@LJ::USE_LOCAL_RES) { - if (grep { lc $_ eq lc $key } @LJ::USE_LOCAL_RES) { - my $inc = $key; - $inc =~ s/(\w+)\.(\w+)$/$1-local.$2/; - LJ::need_res($inc); + if ( $include_links ) { + my $now = time(); + my %list; # type -> []; + my %oldest; # type -> $oldest + my %included = (); + my $add = sub { + my ($type, $what, $modtime) = @_; + + # the same file may have been included twice + # if it was in two different groups and not JS + # so add another check here + next if $included{$what}; + $included{$what} = 1; + + # in the concat-res case, we don't directly append the URL w/ + # the modtime, but rather do one global max modtime at the + # end, which is done later in the tags function. + $what .= "?v=$modtime" unless $do_concat; + + push @{$list{$type} ||= []}, $what; + $oldest{$type} = $modtime if $modtime > ( $oldest{$type} || 0 ); + }; + + # we may not want to pull in the libraries again, say if we're pulling in elements via an ajax load + delete $LJ::NEEDED_RES[$LJ::LIB_RES_PRIORITY] unless $include_libs; + + foreach my $by_priority ( reverse @LJ::NEEDED_RES ) { + next unless $by_priority; + + foreach my $resrow ( @$by_priority ) { + # determine if this resource is part of the resource group that is active; + # or 'default' if no group explicitly active + my ( $group, $key ) = @$resrow; + next if + $group ne 'all' && + ( ( defined $LJ::ACTIVE_RES_GROUP && $group ne $LJ::ACTIVE_RES_GROUP ) || + ( ! defined $LJ::ACTIVE_RES_GROUP && $group ne 'default' ) ); + + my $path; + my $mtime = _file_modtime($key, $now); + if ($key =~ m!^stc/fck/! || $LJ::FORCE_WSTAT{$key}) { + $path = "w$key"; # wstc/ instead of stc/ + } else { + $path = $key; + } + + # if we want to also include a local version of this file, include that too + if (@LJ::USE_LOCAL_RES) { + if (grep { lc $_ eq lc $key } @LJ::USE_LOCAL_RES) { + my $inc = $key; + $inc =~ s/(\w+)\.(\w+)$/$1-local.$2/; + LJ::need_res($inc); + } + } + + if ($path =~ m!^js/(.+)!) { + $add->('js', $1, $mtime); + } elsif ($path =~ /\.css$/ && $path =~ m!^(w?)stc/(.+)!) { + $add->("${1}stccss", $2, $mtime); + } elsif ($path =~ /\.js$/ && $path =~ m!^(w?)stc/(.+)!) { + $add->("${1}stcjs", $2, $mtime); } } - - if ($path =~ m!^js/(.+)!) { - $add->('js', $1, $mtime); - } elsif ($path =~ /\.css$/ && $path =~ m!^(w?)stc/(.+)!) { - $add->("${1}stccss", $2, $mtime); - } elsif ($path =~ /\.js$/ && $path =~ m!^(w?)stc/(.+)!) { - $add->("${1}stcjs", $2, $mtime); + } + + my $tags = sub { + my ($type, $template) = @_; + my $list; + return unless $list = $list{$type}; + + if ($do_concat) { + my $csep = join(',', @$list); + $csep .= "?v=" . $oldest{$type}; + $template =~ s/__+/??$csep/; + $ret .= $template; + } else { + foreach my $item (@$list) { + my $inc = $template; + $inc =~ s/__+/$item/; + $ret .= $inc; + } } - } + }; + + $tags->("js", "<script type=\"text/javascript\" src=\"$jsprefix/___\"></script>\n"); + $tags->("stccss", "<link rel=\"stylesheet\" type=\"text/css\" href=\"$statprefix/___\" />\n"); + $tags->("wstccss", "<link rel=\"stylesheet\" type=\"text/css\" href=\"$wstatprefix/___\" />\n"); + $tags->("stcjs", "<script type=\"text/javascript\" src=\"$statprefix/___\"></script>\n"); + $tags->("wstcjs", "<script type=\"text/javascript\" src=\"$wstatprefix/___\"></script>\n"); } - my $tags = sub { - my ($type, $template) = @_; - my $list; - return unless $list = $list{$type}; - - if ($do_concat) { - my $csep = join(',', @$list); - $csep .= "?v=" . $oldest{$type}; - $template =~ s/__+/??$csep/; - $ret .= $template; - } else { - foreach my $item (@$list) { - my $inc = $template; - $inc =~ s/__+/$item/; - $ret .= $inc; - } - } - }; - - $tags->("js", "<script type=\"text/javascript\" src=\"$jsprefix/___\"></script>\n"); - $tags->("stccss", "<link rel=\"stylesheet\" type=\"text/css\" href=\"$statprefix/___\" />\n"); - $tags->("wstccss", "<link rel=\"stylesheet\" type=\"text/css\" href=\"$wstatprefix/___\" />\n"); - $tags->("stcjs", "<script type=\"text/javascript\" src=\"$statprefix/___\"></script>\n"); - $tags->("wstcjs", "<script type=\"text/javascript\" src=\"$wstatprefix/___\"></script>\n"); return $ret; } diff -r 5f87391fecc9 -r 15c9ff5272b1 views/entry/options.tt --- a/views/entry/options.tt Mon Dec 05 22:31:48 2011 +0800 +++ b/views/entry/options.tt Mon Dec 05 23:26:21 2011 +0800 @@ -15,6 +15,7 @@ [%- sections.windowtitle = ".title" | ml -%] [% dw.need_res( "stc/simple-form.css" ) %] +[%- dw.need_res( { group => "fragment" }, "stc/simple-form.css", "stc/jquery.postoptions.css", "js/jquery.postoptions.js" ) -%] <form action="/entry/options" method="post" id="post-options" class="simple-form"> @@ -123,12 +124,4 @@ </form> -[%- IF use_js -%] -<link rel="stylesheet" type="text/css" href="[%site.statroot%]/simple-form.css"> -<link rel="stylesheet" type="text/css" href="[%site.statroot%]/jquery.postoptions.css"> - - -<script type="text/javascript" src="[%site.jsroot%]/jquery.postoptions.js"></script> -[%- ELSE -%] - <p><a href="[%site.root%]/entry/new">[% ".back" | ml %]</a></p> -[%- END -%] +[%- UNLESS use_js -%]<p><a href="[%site.root%]/entry/new">[% ".back" | ml %]</a></p>[%- END -%] --------------------------------------------------------------------------------