GithubHelp home page GithubHelp logo

assetix's Introduction

Assetix

A simple wrapper for easily using Assetic. Provides a simple way for including assets and letting Assetic build and cache them in production.

Assetix uses composer for including Assetic. Follow the steps at Packagist if you are unfamiliar with composer to get going.

Example

require_once('classes/assetix.php');

use Assetix\Assetix;

// Instantiate Assetix
$assetix = new Assetix();

// Add css files to group base_css
$css = array('/css/test.css');
$assetix->css('base_css', $css);

// Add js files to group base_js
$js = array('/js/underscore.js', '/js/*');
$assetix->js('base_js', $js);

// Echo out raw compiled files
echo $assetix->css('base_css', true)."\n";
echo $assetix->js('base_js', true)."\n";

// Echo out links to compiled files
echo $assetix->css('base_css')."\n";
echo $assetix->js('base_js')."\n";

Installation

Follow the instructions on Packagist to add "kloy/assetix": "0.1.*" in the require section of your composer.json file and install. Once installed run npm install . from the vendor/kloy/assetix/ dir. This will install the needed nodejs modules for compiling less, stylus, and coffeescript.

Available asset function

Assetix features the ability to compile many assets. All functions implement the same argument structure. This structure is func('group', array() /* asset paths */, bool /* true for raw outputting, false for a link */). As you may have noticed, you can call func() without an array of assets if you just wish to get a link from a previously defined group. You may call it with a second argument of true to get the raw output of the group. The current list of asset functions is below...

  • css() - normal css stylesheet
  • less() - less css
  • styl() - stylus css
  • js() - normal javascript
  • coffee() - coffee-script
  • underscore() - underscore javascript templates
  • handlebars() - handlebars javascript templates

How does the build process work?

The assets are lazily built on the first request for them. Once built they are cached so further builds for the same asset is not needed. In a production setting you will assign a version number in the assetix config. When this version number is changed all assets are rebuilt and a new file with this version number is generated for cache busting purposes.

Assets that become css are first compiled to css, then images are embedded into the css via datauri and base64 encoding, last the assets get minimized. Assets that become js are compiled to js and minimized.

Internet Explorer Version 7 and below.

IE 7 and below does not support datauri functionality used for embedding images into css. In order to work around this you can prefix 'ie_' to a group's name. Here is an example.

css('ie_foo', array('css/*'));

This will cause the compiler to not use the embedcss filter which means all images will be requested as normal.

Rewriting CSS

By the default all relative ../ paths are replaced with /assets/production/. To modify this behavior change $config['css_rewrite_replacement'] to use a different replacement value or $config['css_rewrite_pattern'] to use a different pattern for matching.The way the css rewrite works is the content of a css file is passed through preg_replace. So make sure your values for $config['css_rewrite_replacement'] and $config['css_rewrite_pattern'] work properly with this function.

To modify the css rewrite on the fly you can call $assetix->set_rewrite($replacement, $pattern);

Example:

$assetix->set_rewrite('\\1/foo/');
$test2 = $assetix->css('ie_base_css', array('/rewrite_css/test.2.css'), true);

All calls to $assetix->css will use the set replacement value for now on. To change the replacement value again just call $assetix->set_rewrite() with new values.

To better understand how css rewrite works take a look at Assetix::_construct() and Assetix::set_rewrite() and follow the code back to MyCssRewriteFilter.

API

The public available APIs are described in interfaces. Currently the iAssetix and iCompiler interfaces exist. This project follows Semantic Versioning.

assetix's People

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

assetix's Issues

Allow for local node modules to be used

Currently only globally installed node modules are supported. It'd be nice if modules could be installed using a package.json file locally into a project.

IE 6, 7 stylesheets

IE 7 => does not support datauri base64 embedded images. Support for providing an IE stylesheet is needed.

Compatible api to FuelPHP's Asset class

A compatible api with Fuel's Asset class would be nice. This would allow for no modification to existing code bases to be changed while allowing for the adding functionality of assetix to be used.

jQuery Templates Support

Add the ability to use jQuery Templates. Would require a custom Assetic function to be written.

Mustache Support

Add the ability to use Mustache Javascript Templates. Would require a custom Assetic function to be written.

Rewrite relative URIs

Currently relative URIs in css break when the stylesheet is outputted to a directory not following the same structure as the source. To fix this relative image URIs need to be rewritten so they will not break.

Dust Templates support

Add the ability to use Dust Javascript Templates. Would require a custom Assetic function to be written.

Hook for FuelPHP

A bootstrap.php file is needed to allow Assetix to be used as a FuelPHP package.

Handlebars support

Add the ability to use Handlebar Templates. Would require a custom Assetic function to be written.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.