The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Mojolicious::Plugin::AssetPack::Manual::Cookbook - Code snippets

REWRITE ONLINE ASSET

Rewrite URLs

This example contains a preprocessors to expand the url() definitions in a css file downloaded from a CDN:

  $app->asset->preprocessors->add(
    css => sub {
      my ($assetpack, $text, $file) = @_;

      if ($file =~ /font.*awesome/) {
        $$text =~ s!url\(["']../([^']+)["']\)!url(https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/$1)!g;
      }
    },
  );

  $app->asset("app.css" => "https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css");

Fetch referred assets

This example contains a preprocessors which fetch referred assets and serves them from the local webserver:

  use File::Basename "basename";
  my $cdn_base_url = "http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0";

  $t->app->asset->preprocessors->add(
    css => sub {
      my ($assetpack, $text, $file) = @_;
      my $fetch = sub {
        my $url  = "$cdn_base_url/$1";
        my $path = $assetpack->fetch($url);
        return sprintf "url('%s')", basename $path;
      };

      $$text =~ s!url\('..([^']+)'\)!{ $fetch->() }!ge if $file =~ /awesome/;
    }
  );

  $t->app->asset("app.css" => "$cdn_base_url/css/font-awesome.css");

ONLINE ASSETS

Font Awesome

  $app->asset("app.css" => "https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css");

See also "Rewrite URLs" and http://fortaweso.me/font-awesome/.

Google fonts

  $app->asset("app.css" => "http://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic");

See also http://www.google.com/fonts for a selection of fonts.

jQuery

  $app->asset("app.js" => "http://code.jquery.com/jquery-1.11.2.min.js");

See http://api.jquery.com/ for jQuery documentation.

SHIPPING

Remember to minify your assets

AssetPack can create both minified and expanded assets, dependent on the mode. This is important to remember when you want to ship an application, since you might forget to create the production assets while developing.

To makes sure this is done, you can add the code below as a unit test:

  use Test::More;
  use Mojolicious::Plugin::AssetPack;
  Mojolicious::Plugin::AssetPack->test_app("MyApp");
  done_testing;

See also "test_app" in Mojolicious::Plugin::AssetPack.

Bundling the assets before shipping to CPAN

You can follow the same "Making your application installable" in Mojolicious::Guides::Cookbook guide, since the assets are stored in your "public" directory.

NEXT

Have a look at the unit tests.

AUTHOR

Jan Henning Thorsen - jhthorsen@cpan.org