summaryrefslogtreecommitdiffstats
path: root/Bugzilla
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla')
-rw-r--r--Bugzilla/Install/Filesystem.pm77
-rw-r--r--Bugzilla/Template.pm17
-rw-r--r--Bugzilla/Util.pm8
3 files changed, 89 insertions, 13 deletions
diff --git a/Bugzilla/Install/Filesystem.pm b/Bugzilla/Install/Filesystem.pm
index 7cfda8304..79eeca98e 100644
--- a/Bugzilla/Install/Filesystem.pm
+++ b/Bugzilla/Install/Filesystem.pm
@@ -30,6 +30,8 @@ use File::Find;
use File::Path;
use File::Basename;
use File::Copy qw(move);
+use File::Spec;
+use Cwd ();
use File::Slurp;
use IO::File;
use POSIX ();
@@ -350,6 +352,36 @@ sub FILESYSTEM {
"$skinsdir/contrib" => DIR_WS_SERVE,
);
+ my $yui_all_css = sub {
+ return join("\n",
+ map {
+ my $css = read_file($_);
+ _css_url_fix($css, $_, "skins/yui.css.list")
+ } read_file("skins/yui.css.list", { chomp => 1 })
+ );
+ };
+
+ my $yui_all_js = sub {
+ return join("\n",
+ map { scalar read_file($_) } read_file("js/yui.js.list", { chomp => 1 })
+ );
+ };
+
+ my $yui3_all_css = sub {
+ return join("\n",
+ map {
+ my $css = read_file($_);
+ _css_url_fix($css, $_, "skins/yui3.css.list")
+ } read_file("skins/yui3.css.list", { chomp => 1 })
+ );
+ };
+
+ my $yui3_all_js = sub {
+ return join("\n",
+ map { scalar read_file($_) } read_file("js/yui3.js.list", { chomp => 1 })
+ );
+ };
+
# The name of each file, pointing at its default permissions and
# default contents.
my %create_files = (
@@ -361,6 +393,18 @@ sub FILESYSTEM {
# or something else is not running as the webserver or root.
"$datadir/mailer.testfile" => { perms => CGI_WRITE,
contents => '' },
+ "js/yui.js" => { perms => CGI_READ,
+ overwrite => 1,
+ contents => $yui_all_js },
+ "skins/yui.css" => { perms => CGI_READ,
+ overwrite => 1,
+ contents => $yui_all_css },
+ "js/yui3.js" => { perms => CGI_READ,
+ overwrite => 1,
+ contents => $yui3_all_js },
+ "skins/yui3.css" => { perms => CGI_READ,
+ overwrite => 1,
+ contents => $yui3_all_css },
);
# Because checksetup controls the creation of index.html separately
@@ -520,6 +564,31 @@ sub update_filesystem {
_remove_dynamic_assets();
}
+sub _css_url_fix {
+ my ($content, $from, $to) = @_;
+ my $from_dir = dirname(File::Spec->rel2abs($from, bz_locations()->{libpath}));
+ my $to_dir = dirname(File::Spec->rel2abs($to, bz_locations()->{libpath}));
+
+ return css_url_rewrite(
+ $content,
+ sub {
+ my ($url) = @_;
+ if ( $url =~ m{^(?:/|data:)} ) {
+ return sprintf 'url(%s)', $url;
+ }
+ else {
+ my $new_url = File::Spec->abs2rel(
+ Cwd::realpath(
+ File::Spec->rel2abs( $url, $from_dir )
+ ),
+ $to_dir
+ );
+ return sprintf "url(%s)", $new_url;
+ }
+ }
+ );
+}
+
sub _remove_empty_css_files {
my $skinsdir = bz_locations()->{'skinsdir'};
foreach my $css_file (glob("$skinsdir/custom/*.css"),
@@ -623,7 +692,13 @@ sub _create_files {
print "Creating $file...\n";
my $fh = IO::File->new( $file, O_WRONLY | O_CREAT, $info->{perms} )
or die "unable to write $file: $!";
- print $fh $info->{contents} if exists $info->{contents};
+ my $contents = $info->{contents};
+ if (defined $contents && ref($contents) eq 'CODE') {
+ print $fh $contents->();
+ }
+ elsif (defined $contents) {
+ print $fh $contents;
+ }
$fh->close;
}
}
diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm
index b08cffbde..29b1d4a13 100644
--- a/Bugzilla/Template.pm
+++ b/Bugzilla/Template.pm
@@ -383,28 +383,23 @@ sub mtime_filter {
# Set up the skin CSS cascade:
#
-# 1. standard/global.css
-# 2. YUI CSS
+# 1. YUI CSS
+# 2. standard/global.css
# 3. Standard Bugzilla stylesheet set
# 4. Third-party "skin" stylesheet set, per user prefs
# 5. Inline css passed to global/header.html.tmpl
# 6. Custom Bugzilla stylesheet set
sub css_files {
- my ($style_urls, $yui, $yui_css) = @_;
+ my ($style_urls, $no_yui) = @_;
# global.css belongs on every page
my @requested_css = ( 'skins/standard/global.css', @$style_urls );
- my @yui_required_css;
- foreach my $yui_name (@$yui) {
- next if !$yui_css->{$yui_name};
- push(@yui_required_css, "js/yui/assets/skins/sam/$yui_name.css");
- }
- unshift(@requested_css, @yui_required_css);
-
+ unshift @requested_css, "skins/yui.css" unless $no_yui;
+
my @css_sets = map { _css_link_set($_) } @requested_css;
-
+
my %by_type = (standard => [], skin => [], custom => []);
foreach my $set (@css_sets) {
foreach my $key (keys %$set) {
diff --git a/Bugzilla/Util.pm b/Bugzilla/Util.pm
index ca8187c5f..5337ce940 100644
--- a/Bugzilla/Util.pm
+++ b/Bugzilla/Util.pm
@@ -18,7 +18,7 @@ use base qw(Exporter);
css_class_quote html_light_quote
i_am_cgi i_am_webservice correct_urlbase remote_ip
validate_ip do_ssl_redirect_if_required use_attachbase
- diff_arrays on_main_db
+ diff_arrays on_main_db css_url_rewrite
trim wrap_hard wrap_comment find_wrap_point
format_time validate_date validate_time datetime_from time_ago
file_mod_time is_7bit_clean
@@ -427,6 +427,12 @@ sub diff_arrays {
return (\@removed, \@added);
}
+sub css_url_rewrite {
+ my ($content, $callback) = @_;
+ $content =~ s{(?<!=)url\((["']?)([^\)]+?)\1\)}{$callback->($2)}eig;
+ return $content;
+}
+
sub trim {
my ($str) = @_;
if ($str) {