[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
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 -%]
--------------------------------------------------------------------------------
