Main Koha release repository
https://koha-community.org
25개 이상의 토픽을 선택하실 수 없습니다.
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
3.6 KiB
175 lines
3.6 KiB
package Koha::Template::Plugin::Asset;
|
|
|
|
# Copyright 2018 BibLibre
|
|
#
|
|
# This file is part of Koha.
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Koha; if not, see <http://www.gnu.org/licenses>.
|
|
|
|
=head1 NAME
|
|
|
|
Koha::Template::Plugin::Asset
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
The Asset plugin is a helper that generates HTML tags for JS and CSS files
|
|
|
|
=head1 SYNOPSYS
|
|
|
|
[% USE Asset %]
|
|
|
|
[% Asset.css("css/datatables.css") %]
|
|
[% Asset.js("js/datatables.js") %]
|
|
|
|
[%# With attributes %]
|
|
[% Asset.css("css/print.css", { media = "print" }) %]
|
|
|
|
[%# If you only want the url and not the HTML tag %]
|
|
[% url = Asset.url("css/datatables.css") %]
|
|
|
|
=cut
|
|
|
|
use Modern::Perl;
|
|
|
|
use Template::Plugin;
|
|
use base qw( Template::Plugin );
|
|
|
|
use File::Basename;
|
|
use File::Spec;
|
|
use C4::Context;
|
|
use Koha;
|
|
|
|
=head1 FUNCTIONS
|
|
|
|
=head2 new
|
|
|
|
Constructor. Do not use this directly.
|
|
|
|
=cut
|
|
|
|
sub new {
|
|
my ($class, $context) = @_;
|
|
|
|
my $self = {
|
|
_CONTEXT => $context,
|
|
};
|
|
|
|
return bless $self, $class;
|
|
}
|
|
|
|
=head2 js
|
|
|
|
Returns a <script> tag for the given JS file
|
|
|
|
[% Asset.js('js/datatables.js') %]
|
|
|
|
=cut
|
|
|
|
sub js {
|
|
my ( $self, $filename, $attributes ) = @_;
|
|
|
|
my $url = $self->url($filename);
|
|
unless ($url) {
|
|
warn "File not found : $filename";
|
|
return;
|
|
}
|
|
|
|
$attributes->{src} = $url;
|
|
|
|
return $self->_tag('script', $attributes) . '</script>';
|
|
}
|
|
|
|
=head2 css
|
|
|
|
Returns a <link> tag for the given CSS file
|
|
|
|
[% Asset.css('css/datatables.css') %]
|
|
[% Asset.css('css/print.css', { media = "print" }) %]
|
|
|
|
=cut
|
|
|
|
sub css {
|
|
my ( $self, $filename, $attributes ) = @_;
|
|
|
|
my $url = $self->url($filename);
|
|
unless ($url) {
|
|
warn "File not found : $filename";
|
|
return;
|
|
}
|
|
|
|
$attributes->{rel} = 'stylesheet';
|
|
$attributes->{type} = 'text/css';
|
|
$attributes->{href} = $url;
|
|
|
|
return $self->_tag('link', $attributes);
|
|
}
|
|
|
|
=head2 url
|
|
|
|
Returns the URL for the given file
|
|
|
|
[% Asset.url('css/datatables.css') %]
|
|
|
|
=cut
|
|
|
|
sub url {
|
|
my ( $self, $filename ) = @_;
|
|
|
|
my $stash = $self->{_CONTEXT}->stash();
|
|
my $interface = $stash->get('interface');
|
|
my $theme = $stash->get('theme');
|
|
|
|
my $configkey = $interface =~ /opac/ ? 'opachtdocs' : 'intrahtdocs';
|
|
my $root = C4::Context->config($configkey);
|
|
|
|
my ($basename, $dirname, $suffix) = fileparse($filename, qr/\.[^.]*/);
|
|
|
|
my $type = substr $suffix, 1;
|
|
my @dirs = (
|
|
"$theme",
|
|
".",
|
|
);
|
|
|
|
my $version = Koha::version;
|
|
$version =~ s/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/$1.$2$3$4/;
|
|
foreach my $dir (@dirs) {
|
|
my $abspath = File::Spec->catfile($root, $dir, $filename);
|
|
if (-e $abspath) {
|
|
return File::Spec->catfile($interface, $dir, $dirname, "${basename}_${version}${suffix}");
|
|
}
|
|
}
|
|
}
|
|
|
|
=head2 _tag
|
|
|
|
Returns an HTML tag with given name and attributes.
|
|
This shouldn't be used directly.
|
|
|
|
=cut
|
|
|
|
sub _tag {
|
|
my ($self, $name, $attributes) = @_;
|
|
|
|
my @attributes_strs;
|
|
if ($attributes) {
|
|
while (my ($key, $value) = each %$attributes) {
|
|
push @attributes_strs, qq{$key="$value"};
|
|
}
|
|
}
|
|
my $attributes_str = join ' ', @attributes_strs;
|
|
|
|
return "<$name $attributes_str>";
|
|
}
|
|
|
|
1;
|
|
|