Bugzilla – Attachment 9112 Details for
Bug 1918
Minify JavaScript and CSS
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 1918 - Minify JavaScript and CSS
Bug-1918---Minify-JavaScript-and-CSS.patch (text/plain), 22.61 KB, created by
Dobrica Pavlinusic
on 2012-04-11 12:25:33 UTC
(
hide
)
Description:
Bug 1918 - Minify JavaScript and CSS
Filename:
MIME Type:
Creator:
Dobrica Pavlinusic
Created:
2012-04-11 12:25:33 UTC
Size:
22.61 KB
patch
obsolete
>From f17fd1e081231c38a3dcdf6390f008141abd96c9 Mon Sep 17 00:00:00 2001 >From: Dobrica Pavlinusic <dpavlin@rot13.org> >Date: Sat, 7 Apr 2012 16:39:04 +0200 >Subject: [PATCH] Bug 1918 - Minify JavaScript and CSS > >This provides new Koha::Template::Plugin::Combine which is intended >to replace direct include of JavaScript and CSS files. > >This plugin preserves order of included files when combining them. > >Code need cleanup and documentation, but attaching it to bug will >provide easier way to try it out. >--- > Koha/Template/Plugin/Combine.pm | 141 +++++++++++++++++++ > .../intranet-tmpl/prog/en/css/staff-global.css | 3 +- > .../prog/en/includes/doc-head-close.inc | 46 ++++--- > koha-tmpl/opac-tmpl/prog/en/css/opac.css | 3 - > .../opac-tmpl/prog/en/includes/doc-head-close.inc | 143 +++++++++++++------- > koha-tmpl/opac-tmpl/prog/en/js/script.js | 1 - > 6 files changed, 259 insertions(+), 78 deletions(-) > create mode 100644 Koha/Template/Plugin/Combine.pm > >diff --git a/Koha/Template/Plugin/Combine.pm b/Koha/Template/Plugin/Combine.pm >new file mode 100644 >index 0000000..c84bc7f >--- /dev/null >+++ b/Koha/Template/Plugin/Combine.pm >@@ -0,0 +1,141 @@ >+package Koha::Template::Plugin::Combine; >+use Template::Plugin; >+use base qw( Template::Plugin ); >+use warnings; >+use strict; >+ >+# PLACK_DEBUG=1 always re-create files but report correct hit/miss ration >+ >+use File::Slurp; >+use Digest::MD5; >+use Data::Dump qw(dump); >+ >+use CSS::Minifier::XS; >+use JavaScript::Minifier::XS; >+ >+sub new { >+ my ($class, $context, @params) = @_; >+#warn "## context ",dump( $context ); >+ bless { >+ _CONTEXT => $context, >+ js => [], # same as extension! >+ css => [], >+ inline => 1, >+ minify => 1, >+ }, $class; >+} >+ >+sub _html_params { >+ my $params = shift; >+ return join(' ', map { $_ . '="' . $params->{$_} . '"' } keys %$params ); >+} >+ >+sub javascript { >+ my ( $self, $params ) = @_; >+ warn "## combine.javascript ", dump( $params ); >+ $params->{type} ||= 'text/javascript'; >+ push @{ $self->{js} }, $params; >+ my $html = _html_params( $params ); >+ if ( $self->{inline} ) { >+ return "<!-- script $html -->\n"; >+ } elsif ( my $cdata = $params->{cdata} ) { >+ return qq|<script type="text/javascript" language="javascript">\n//<![CDATA[\n$cdata\n//]]>\n</script>\n|; >+ } else { >+ return "<script $html></script>\n"; >+ } >+} >+ >+sub css { >+ my ( $self, $params ) = @_; >+ warn "## combine.css ",dump( $params ); >+ $params->{rel} ||= 'stylesheet'; >+ $params->{type} ||= 'text/css'; >+ die "no href in ",dump($params) unless exists $params->{href}; >+ my $html = _html_params( $params ); >+ >+ if ( exists $params->{media} ) { # FIXME not combined! >+ push @{ $self->{css_media} }, "<link $html />"; >+ return "<!-- media $html -->"; >+ } >+ >+ push @{ $self->{css} }, $params; >+ if ( $self->{inline}) { >+ return "<!-- link $html -->\n"; >+ } else { >+ return "<link $html />\n"; >+ } >+} >+ >+sub combined_files { >+ my ( $self, $what, $attr, $params ) = @_; >+warn "## combined_files $what $attr ",dump($params); >+ my $key = join(' ', map { $_->{$attr} || $_->{cdata} } @{ $self->{$what} } ); >+ $key = Digest::MD5::md5_hex( $key ); # shorten filenames >+ warn "# $what $attr key = $key\n"; >+ my $htdocs = C4::Context->config('intrahtdocs'); >+ $htdocs =~ s{/intranet-tmpl/?$}{}; # FIXME DocumentRoot even for OPAC >+ >+ my ( $path, $url ); >+ if ( my $prefix = $params->{prefix} ) { >+ $path = "$htdocs/$prefix/combined/$key.$what"; >+ $url = "$prefix/combined/$key.$what"; >+ } else { >+ $path = "$htdocs/intranet-tmpl/combined/$key.$what"; >+ $url = "/intranet-tmpl/combined/$key.$what"; >+ } >+ $path =~ s{//+}{/}; # plack is picky about paths >+ if ( -e $path ) { >+ $Koha::Persistant::stats->{combine_files}->[0]++; # hit >+ return $url if ! $ENV{PLACK_DEBUG}; # FIXME no caching with debug >+ } >+ $Koha::Persistant::stats->{combine_files}->[1]++ if ! $ENV{PLACK_DEBUG}; # miss >+ >+ my $mix; >+ foreach my $include ( @{ $self->{$what} } ) { >+ if ( my $path = $include->{$attr} ) { >+ warn "combine_files $what $attr - $path"; >+ my $chunk = read_file("$htdocs/$path"); >+ die "$htdocs/$path found \@import" if $what eq 'css' && $chunk =~ m'@import'; >+ $mix .= "\n/* BEGIN $path */\n$chunk\n/* END $path */\n"; >+ } elsif ( my $cdata = $include->{cdata} ) { >+ warn "combine_files CDATA $cdata"; >+ $mix .= "\n/* BEGIN CDATA */\n$cdata\n/* END CDATA */\n"; >+ } >+ } >+ my $combined_size = length($mix); >+ if ( $self->{minify} ) { >+ if ( $what eq 'js' ) { >+ $mix = JavaScript::Minifier::XS::minify( $mix ); >+ } elsif ( $what eq 'css' ) { >+ $mix = CSS::Minifier::XS::minify( $mix ); >+ } else { >+ die "can't minify $what"; >+ } >+ my $size = length($mix); >+ warn sprintf "minify %s %d -> %d %.2f%%\n", $what, $combined_size, $size, $size * 100 / $combined_size; >+ } >+ write_file $path, $mix; >+ warn "## $path ", -s $path, "/$combined_size bytes\n"; >+ return $url; >+} >+ >+sub html { >+ my ( $self, $params ) = @_; >+ >+ if ( $self->{inline} ) { >+ warn "## css ",dump( $self->{css} ); >+ warn "## javascript ",dump( $self->{js} ); >+ my $mix; >+ my $js = $self->combined_files( 'js' => 'src', $params ); >+ my $css = $self->combined_files( 'css' => 'href', $params ); >+ return qq{ >+ <!-- combined.html --> >+ <link type="text/css" href="$css" rel="stylesheet" /> >+ <script type="text/javascript" src="$js"></script> >+ }; >+ } else { >+ return "<!-- javascript and css combine disabled -->"; >+ } >+} >+ >+1; >diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css >index ef01648..3519d20 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css >+++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css >@@ -1,5 +1,4 @@ >-@import url("../lib/yui/reset-fonts-grids.css"); >-@import url("../lib/yui/skin.css"); >+/* import moved to koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc */ > > a, a:link, a:visited, a:active { > color : #0000CC; >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc >index bc551ac..b15aea4 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc >@@ -1,42 +1,45 @@ > <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> >+[% USE combine = Combine %] > <link rel="shortcut icon" href="[% IF ( IntranetFavicon ) %][% IntranetFavicon %][% ELSE %][% themelang %]/includes/favicon.ico[% END %]" type="image/x-icon" /> >-<link rel="stylesheet" type="text/css" href="[% themelang %]/lib/jquery/plugins/ui.tabs.css" /> >-<link rel="stylesheet" type="text/css" media="print" href="[% themelang %]/css/print.css" /> >+[% combine.css( href => themelang _ "/lib/jquery/plugins/ui.tabs.css" ) %] >+[% combine.css( media => "print" href => themelang _ "/css/print.css" ) %] > [% IF ( intranetstylesheet ) %] >- <link rel="stylesheet" type="text/css" href="[% intranetstylesheet %]" /> >+ [% combine.css( href => intranetstylesheet ) %] > [% ELSE %] >- <link rel="stylesheet" type="text/css" href="[% themelang %]/css/staff-global.css" /> >+ [% combine.css( href => yuipath _ "/reset-fonts-grids.css" ) %] >+ [% combine.css( href => yuipath _ "/skin.css" ) %] >+ [% combine.css( href => themelang _ "/css/staff-global.css" ) %] > [% END %] > [% IF ( IntranetUserCSS ) %]<style type="text/css">[% IntranetUserCSS %]</style>[% END %] >-<script type="text/javascript" src="[% themelang %]/lib/jquery/jquery.js"></script> >-<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/ui.tabs.js"></script> >-<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.hotkeys.min.js"></script> >-<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.cookie.min.js"></script> >-<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.highlight-3.js"></script> >+[% combine.javascript( src => themelang _ "/lib/jquery/jquery.js" ) %] >+[% combine.javascript( src => themelang _ "/lib/jquery/plugins/ui.tabs.js" ) %] >+[% combine.javascript( src => themelang _ "/lib/jquery/plugins/jquery.hotkeys.min.js" ) %] >+[% combine.javascript( src => themelang _ "/lib/jquery/plugins/jquery.cookie.min.js" ) %] >+[% combine.javascript( src => themelang _ "/lib/jquery/plugins/jquery.highlight-3.js" ) %] > [% IF ( login ) %] >- <link rel="stylesheet" type="text/css" href="[% themelang %]/css/login.css" /> >+ [% combine.css( href => themelang _ "/css/login.css" ) %] > [% END %] > [% IF ( wizard ) %] >- <link rel="stylesheet" type="text/css" href="[% themelang %]/css/wizard.css" /> >+ [% combine.css( href => themelang _ "/css/wizard.css" ) %] > [% END %] > > <!-- local colors --> > [% IF ( intranetcolorstylesheet ) %] >- <link rel="stylesheet" type="text/css" href="[% themelang %]/css/[% intranetcolorstylesheet %]" /> >+ [% combine.css( href => themelang _ "/css/" _ intranetcolorstylesheet ) %] > [% END %] > > <!-- yui js --> >-<script type="text/javascript" src="[% yuipath %]/utilities/utilities.js"></script> >-<script type="text/javascript" src="[% yuipath %]/datasource/datasource-min.js"></script> >+[% combine.javascript( src => yuipath _ "/utilities/utilities.js" ) %] >+[% combine.javascript( src => yuipath _ "/datasource/datasource-min.js" ) %] > [% IF ( CircAutocompl ) %] >- <script type="text/javascript" src="[% yuipath %]/autocomplete/autocomplete-min.js"></script> >+ [% combine.javascript( src => yuipath _ "/autocomplete/autocomplete-min.js" ) %] > [% END %] >-<script type="text/javascript" src="[% yuipath %]/button/button-min.js"></script> >-<script type="text/javascript" src="[% yuipath %]/container/container_core-min.js"></script> >-<script type="text/javascript" src="[% yuipath %]/menu/menu-min.js"></script> >+[% combine.javascript( src => yuipath _ "/button/button-min.js" ) %] >+[% combine.javascript( src => yuipath _ "/container/container_core-min.js" ) %] >+[% combine.javascript( src => yuipath _ "/menu/menu-min.js" ) %] > > <!-- koha core js --> >-<script type="text/javascript" src="[% themelang %]/js/staff-global.js"></script> >+[% combine.javascript( src => themelang _ "/js/staff-global.js" ) %] > [% IF ( intranetuserjs ) %] > <script type="text/javascript"> > //<![CDATA[ >@@ -60,13 +63,14 @@ > //]]> > </script> > [% IF ( virtualshelves || intranetbookbag ) %] >- <script type="text/javascript" language="javascript" src="[% themelang %]/js/basket.js"></script> >+ [% combine.javascript( src => themelang _ "/js/basket.js" ) %] > [% END %] > [% IF LocalCoverImages %] >-<script type="text/javascript" language="javascript" src="[% themelang %]/js/localcovers.js"></script> >+[% combine.javascript( src => themelang _ "/js/localcovers.js" ) %] > <script type="text/javascript" language="javascript"> > //<![CDATA[ > var NO_LOCAL_JACKET = _("No cover image available"); > //]]> > </script> > [% END %] >+[% combine.html( prefix => themelang ) %] >diff --git a/koha-tmpl/opac-tmpl/prog/en/css/opac.css b/koha-tmpl/opac-tmpl/prog/en/css/opac.css >index c10e08d..c48a59c 100644 >--- a/koha-tmpl/opac-tmpl/prog/en/css/opac.css >+++ b/koha-tmpl/opac-tmpl/prog/en/css/opac.css >@@ -1,6 +1,3 @@ >-@import url("../lib/yui/reset-fonts-grids.css"); >-@import url("../lib/yui/skin.css"); >- > a { > font-weight : bold; > } >diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/doc-head-close.inc b/koha-tmpl/opac-tmpl/prog/en/includes/doc-head-close.inc >index 3907f34..d5ea90e 100644 >--- a/koha-tmpl/opac-tmpl/prog/en/includes/doc-head-close.inc >+++ b/koha-tmpl/opac-tmpl/prog/en/includes/doc-head-close.inc >@@ -2,50 +2,62 @@ > <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> > <meta name="generator" content="Koha [% Version %]" /> <!-- leave this for stats --> > <link rel="shortcut icon" href="[% IF ( OpacFavicon ) %][% OpacFavicon %][% ELSE %][% themelang %]/includes/favicon.ico[% END %]" type="image/x-icon" /> >-[% IF ( opacstylesheet ) %]<link rel="stylesheet" type="text/css" href="[% opacstylesheet %]" />[% ELSE %] >-[% IF ( opaclayoutstylesheet ) %]<link rel="stylesheet" type="text/css" href="[% themelang %]/css/[% opaclayoutstylesheet %]" />[% ELSE %]<link rel="stylesheet" type="text/css" href="[% themelang %]/css/opac.css" />[% END %][% END %] >+[% USE combine = Combine %] >+[% IF ( opacstylesheet ) %] >+ [% combine.css( href => opacstylesheet ) %] >+[% ELSE %] >+ [% IF ( opaclayoutstylesheet ) %] >+ [% combine.css( href => themelang _ "/css/" _ opaclayoutstylesheet ) %] >+ [% ELSE %] >+ [% combine.css( href => themelang _ "/css/opac.css" ) %] >+ [% END %] >+[% END %] > [% IF ( opaccolorstylesheet ) %] >- <link rel="stylesheet" type="text/css" href="[% themelang %]/css/[% opaccolorstylesheet %]" /> >+ [% combine.css( href => themelang _ "/css/" _ opaccolorstylesheet ) %] > [% END %] > [% IF ( opacexternalsheet ) %] >- <link rel="stylesheet" type="text/css" href="[% opacexternalsheet %]" /> >+ [% combine.css( href => opacexternalsheet ) %] > [% END %] > [% IF ( opac_css_override ) %] >- <link rel="stylesheet" type="text/css" href="[% themelang %]/css/[% opac_css_override %]" /> >+ [% combine.css( href => therelang _ "/css/" _ opac_css_override ) %] > [% END %] > <link rel="stylesheet" type="text/css" media="print" href="[% themelang %]/css/print.css" /> >-<link rel="stylesheet" type="text/css" href="[% themelang %]/lib/jquery/plugins/ui.tabs.css" /> >+[% combine.css( href => themelang _ "/lib/jquery/plugins/ui.tabs.css" ) %] > [% IF ( OPACUserCSS ) %]<style type="text/css">[% OPACUserCSS %]</style>[% END %] > <!-- yui js --> >-<script type="text/javascript" src="[% yuipath %]/utilities/utilities.js"></script> >-<script type="text/javascript" src="[% yuipath %]/container/container-min.js"></script> >-<script type="text/javascript" src="[% yuipath %]/menu/menu-min.js"></script> >-<script type="text/javascript" src="[% themelang %]/lib/jquery/jquery.js"></script> >-<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/ui.tabs.js"></script> >-<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.hoverIntent.minified.js"></script> >-<script type="text/javascript" language="javascript" src="[% themelang %]/js/script.js"></script> >+[% combine.css( href => yuipath _ "/reset-fonts-grids.css" ) %] >+[% combine.css( href => yuipath _ "/skin.css" ) %] >+[% combine.javascript( src => yuipath _ "/utilities/utilities.js" ) %] >+[% combine.javascript( src => yuipath _ "/container/container-min.js" ) %] >+[% combine.javascript( src => yuipath _ "/menu/menu-min.js" ) %] >+[% combine.javascript( src => themelang _ "/lib/jquery/jquery.js" ) %] >+[% combine.javascript( src => themelang _ "/lib/jquery/plugins/ui.tabs.js" ) %] >+[% combine.javascript( src => themelang _ "/lib/jquery/plugins/jquery.hoverIntent.minified.js" ) %] >+[% combine.javascript( src => themelang _ "/js/script.js" ) %] >+ > [% IF ( OPACAmazonCoverImages ) %] >-<script type="text/javascript" language="javascript">//<![CDATA[ >- var NO_AMAZON_IMAGE = _("No cover image available"); >- //]]> >-</script> >-<script type="text/javascript" language="javascript" src="[% themelang %]/js/amazonimages.js"></script> >+[% combine.javascript( cdata => "var NO_AMAZON_IMAGE = _(\"No cover image available\");" ) %] >+[% combine.javascript( src => themelang _ "/js/amazonimages.js" ) %] > [% END %] > [% IF ( SyndeticsCoverImages ) %] >-<script type="text/javascript" language="javascript">//<![CDATA[ >- var NO_AMAZON_IMAGE = _("No cover image available"); >- //]]> >-</script> >-<script type="text/javascript" language="javascript" src="[% themelang %]/js/amazonimages.js"></script> [% END %] >+[% combine.javascript( cdata => "var NO_AMAZON_IMAGE = _(\"No cover image available\");" ) %] >+[% combine.javascript( src => themelang _ "/js/amazonimages.js" ) %] >+[% END %] > >-[% IF ( opacbookbag ) %]<script type="text/javascript" language="javascript" src="[% themelang %]/js/basket.js"> >-[% ELSIF ( virtualshelves ) %]<script type="text/javascript" language="javascript" src="[% themelang %]/js/basket.js"> >-[% ELSE %]<script type="text/javascript" language="javascript"> var readCookie;[% END %] >-</script> >+[% IF ( opacbookbag ) %] >+ [% combine.javascript( src => themelang _ "/js/basket.js" ) %] >+[% ELSIF ( virtualshelves ) %] >+ [% combine.javascript( src => themelang _ "/js/basket.js" ) %] >+[% ELSE %] >+ [% combine.javascript( cdata => "var readCookie;" ) %] >+[% END %] > >+[% combine.javascript( cdata => "var cdata_test;" ) %] > <script type="text/javascript" language="javascript"> > //<![CDATA[ >- [% IF ( opacbookbag ) %]var MSG_BASKET_EMPTY = _("Your cart is currently empty"); >+function _(s) { return s } // dummy function for gettext >+[% IF ( opacbookbag ) %] >+ var MSG_BASKET_EMPTY = _("Your cart is currently empty"); > var MSG_RECORD_IN_BASKET = _("This item is already in your cart"); > var MSG_RECORD_ADDED = _("This item has been added to your cart"); > var MSG_RECORD_REMOVED = _("This item has been removed from your cart"); >@@ -57,9 +69,16 @@ > var MSG_CONFIRM_DEL_RECORDS = _("Are you sure you want to remove the selected items?"); > var MSG_ITEM_IN_CART = _("In your cart"); > var MSG_ITEM_NOT_IN_CART = _("Add to your cart"); >- $("#cartDetails").ready(function(){ $("#cmspan").html("<a href=\"#\" id=\"cartmenulink\" class=\"\"><i><\/i><span><i><\/i><span><\/span><span id=\"carticon\"></span> "+_("Cart")+"<span id=\"basketcount\"><\/span><\/span><\/a>"); }); [% ELSE %][% IF ( virtualshelves ) %] >- var MSG_NO_RECORD_SELECTED = _("No item was selected");[% END %][% END %] >- [% IF ( opacuserlogin ) %][% IF ( TagsEnabled ) %]var MSG_TAGS_DISABLED = _("Sorry, tags are not enabled on this system."); >+// $("#cartDetails").ready(function(){ $("#cmspan").html("<a href=\"#\" id=\"cartmenulink\" class=\"\"><i><\/i><span><i><\/i><span><\/span><span id=\"carticon\"></span> "+_("Cart")+"<span id=\"basketcount\"><\/span><\/span><\/a>"); }); >+[% ELSE %] >+ [% IF ( virtualshelves ) %] >+ var MSG_NO_RECORD_SELECTED = _("No item was selected"); >+ [% END %] >+[% END %] >+ >+[% IF ( opacuserlogin ) %] >+ [% IF ( TagsEnabled ) %] >+ var MSG_TAGS_DISABLED = _("Sorry, tags are not enabled on this system."); > var MSG_TAG_ALL_BAD = _("Error! Your tag was entirely markup code. It was NOT added. Please try again with plain text."); > var MSG_ILLEGAL_PARAMETER = _("Error! Illegal parameter"); > var MSG_TAG_SCRUBBED = _("Note: your tag contained markup code that was removed. The tag was added as "); >@@ -71,21 +90,40 @@ > var MSG_TAGS_ADDED = _("Tags added: "); > var MSG_TAGS_DELETED = _("Tags added: "); > var MSG_TAGS_ERRORS = _("Errors: "); >- var MSG_MULTI_ADD_TAG_FAILED = _("Unable to add one or more tags.");[% END %][% END %] >- [% IF ( OPACAmazonCoverImages ) %]$(window).load(function() { >- verify_images(); >- });[% END %] >- [% IF ( SyndeticsCoverImages ) %]$(window).load(function() { >- verify_images(); >- });[% END %] >- [% IF ( opacuserjs ) %][% opacuserjs %][% END %] >+ var MSG_MULTI_ADD_TAG_FAILED = _("Unable to add one or more tags."); >+ [% END %] >+[% END %] >+[% IF ( OPACAmazonCoverImages ) %] >+ $(window).load(function() { >+ verify_images(); >+ }); >+[% END %] >+[% IF ( SyndeticsCoverImages ) %] >+ $(window).load(function() { >+ verify_images(); >+ }); >+[% END %] >+[% IF ( opacuserjs ) %] >+ [% opacuserjs %] >+[% END %] > //]]> >-[% IF ( opacbookbag ) %]</script><script type="text/javascript" language="javascript" src="[% themelang %]/js/basket.js"> >-[% ELSIF ( virtualshelves ) %]</script><script type="text/javascript" language="javascript" src="[% themelang %]/js/basket.js"> >-[% ELSE %]</script><script type="text/javascript" language="javascript">var readCookie;[% END %]</script> >-[% IF ( opacuserlogin ) %][% IF ( TagsEnabled ) %]<script type="text/javascript" language="javascript" src="[% themelang %]/js/tags.js"></script>[% END %][% ELSE %][% END %] >+</script> >+[% IF ( opacbookbag ) %] >+[% compose.javascript( src => themelang _ "/js/basket.js" ) %] >+[% ELSIF ( virtualshelves ) %] >+[% compose.javascript( src => themelang _ "/js/basket.js" ) %] >+[% ELSE %] >+<script type="text/javascript" language="javascript">var readCookie;</script> >+[% END %] >+ >+[% IF ( opacuserlogin ) %] >+ [% IF ( TagsEnabled ) %] >+ [% combine.javascript( src => themelang _ "/js/tags.js" ) %] >+ [% END %] >+[% END %] >+ > [% IF ( GoogleJackets ) %] >-<script type="text/javascript" language="javascript" src="[% themelang %]/js/google-jackets.js"></script> >+[% combine.javascript( src => themelang _ "/js/google-jackets.js" ) %] > <script type="text/javascript" language="javascript"> > //<![CDATA[ > var NO_GOOGLE_JACKET = _("No cover image available"); >@@ -93,7 +131,7 @@ > </script> > [% END %] > [% IF OpenLibraryCovers %] >-<script type="text/javascript" language="javascript" src="[% themelang %]/js/openlibrary.js"></script> >+[% combine.javascript( src => themelang _ "/js/openlibrary.js" ) %] > <script type="text/javascript" language="javascript"> > //<![CDATA[ > var NO_OL_JACKET = _("No cover image available"); >@@ -102,7 +140,7 @@ var NO_OL_JACKET = _("No cover image available"); > [% END %] > > [% IF OPACLocalCoverImages %] >-<script type="text/javascript" language="javascript" src="[% themelang %]/js/localcovers.js"></script> >+[% combine.javascript( src => themelang _ "/js/localcovers.js" ) %] > <script type="text/javascript" language="javascript"> > //<![CDATA[ > var NO_LOCAL_JACKET = _("No cover image available"); >@@ -110,7 +148,8 @@ var NO_LOCAL_JACKET = _("No cover image available"); > </script> > [% END %] > >-[% IF ( BakerTaylorEnabled ) %]<script type="text/javascript" language="javascript" src="[% themelang %]/js/bakertaylorimages.js"></script> >+[% IF ( BakerTaylorEnabled ) %] >+[% combine.javascript( src => themelang _ "/js/bakertaylorimages.js" ) %] > <script type="text/javascript" language="javascript"> > //<![CDATA[ > var NO_BAKERTAYLOR_IMAGE = _("No cover image available"); >@@ -118,10 +157,12 @@ var NO_LOCAL_JACKET = _("No cover image available"); > bt_verify_images(); > }); > //]]> >-</script>[% END %] >+</script> >+[% END %] >+ > <link rel="unapi-server" type="application/xml" title="unAPI" href="[% OPACBaseURL %]/cgi-bin/koha/unapi" /> > [% IF ( GoogleIndicTransliteration ) %] >- <script type="text/javascript" src="http://www.google.com/jsapi"></script> >- <script type="text/javascript" language="javascript" src="[% themelang %]/js/googleindictransliteration.js"></script> >+ <script type="text/javascript" src="http://www.google.com/jsapi"></script> >+ [% combine.javascript( src => themelang _ "/js/googleindictransliteration.js" ) %] > [% END %] >- >+[% combine.html( prefix => themelang ) %] >diff --git a/koha-tmpl/opac-tmpl/prog/en/js/script.js b/koha-tmpl/opac-tmpl/prog/en/js/script.js >index a3cfab8..67ea771 100644 >--- a/koha-tmpl/opac-tmpl/prog/en/js/script.js >+++ b/koha-tmpl/opac-tmpl/prog/en/js/script.js >@@ -1,4 +1,3 @@ >-function _(s) { return s } // dummy function for gettext > function confirmDelete(message) { > return (confirm(message) ? true : false); > } >-- >1.7.2.5
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 1918
:
9112
|
9917