Carabiner requires the JSMin and CSSMin libraries that I previously ported. They're both included in this release. You don't need to load them, unless you'll be using them elsewhere. Carabiner will load them automatically as needed. (Note: the only reason they're included as separate libraries is that it allows you to use them independently of Carabiner. If desired, you could probably include them in the carabiner.php file itself. You'd have to edit the Carabiner functions, but it could work.)
Load the library as normal:
Configuration can happen in either a config file, or by passing an array of values to the config() method. Config options passed to the config() method will override options in the config file.
See the included config file for more info.
To configure Carabiner using the config() method, do this:
$carabiner_config = array( 'script_dir' => 'assets/scripts/', 'style_dir' => 'assets/styles/', 'cache_dir' => 'assets/cache/', 'base_uri' => $base, 'combine' => TRUE, 'dev' => FALSE ); $this->carabiner->config($carabiner_config);
There are 8 relevant configuration options. The first 3 are required for Carabiner to function, the last 5 are not.
script_dir STRING Path to the script directory. Relative to the CI front controller (index.php)
style_dir STRING Path to the style directory. Relative to the CI front controller (index.php)
cache_dir STRING Path to the cache directory. Must be writable. Relative to the CI front controller (index.php)
base_uri STRING Base uri of the site, like 'http://www.example.com/'. Defaults to base_url config setting from main CodeIgniter config.
dev BOOLEAN Flags whether your in a development environment or not. See above for what this means. Defaults to FALSE.
combine BOOLEAN Flags whether to combine files. Defaults to TRUE.
minify_css BOOLEAN Flags whether to minify CSS. Defaults to TRUE.
Add assets like so:
// add a js file $this->carabiner->js('scripts.js'); // add a css file $this->carabiner->css('reset.css'); // add a css file with a mediatype $this->carabiner->css('admin/print.css','print');
To set a (prebuilt) production version of an asset:
//JS: pass a second string to the method with a path to the production version $this->carabiner->js('wymeditor/wymeditor.js', 'wymeditor/wymeditor.pack.js' ); // CSS: add a css file with prebuilt production version $this->carabiner->css('framework/type.css', 'screen', 'framework/type.pack.css');
And to prevent a file from being combined:
// JS: pass a boolean FALSE as the third attribute of the method $this->carabiner->js('wymeditor/wymeditor.js', 'wymeditor.pack.js', FALSE ); // CSS: pass a boolean FALSE as the fourth attribute of the method $this->carabiner->css('framework/type.css', 'screen', 'framework/type.pack.css', FALSE);
You can also pass arrays (and arrays of arrays) to these methods. Like so:
// a single array $this->carabiner->css( array('mobile.css', 'handheld', 'mobile.prod.css') ); // an array of arrays $js_assets = array( array('dev/jquery.js', 'prod/jquery.js'), array('dev/jquery.ext.js', 'prod/jquery.ext.js'), ) $this->carabiner->js( $js_assets );
Carabiner is smart enough to recognize URLs and treat them differently:
// this now works as expected $this->carabiner->js('http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js');
Carabiner supports grouping of assets. CSS and JS can be assigned to the same group. To define a group, do this:
// Define JS $js = array( array('prototype.js'), array('scriptaculous.js') ); // create group $this->carabiner->group('prototaculous', array('js'=>$js) ); // an IE only group $css = array('iefix.css'); $js = array('iefix.js'); $this->carabiner->group('iefix', array('js'=>$js, 'css'=>$css) ); // you can even assign an asset to a group individually // by passing the group name to the last parameter of the css/js functions $this->carabiner->css('spec.css', 'screen', 'spec-min.css', TRUE, FALSE, 'spec');
For the sake of clarity, assets that aren't assigned a group are put in a group called 'main', and using the display function mentioned below (using the first 3 examples) will output this 'main' group only. New groups must be displayed independently as described below.
To output your assets, including appropriate markup:
// display css $this->carabiner->display('css'); //display js $this->carabiner->display('js'); // display both $this->carabiner->display(); // OR $this->carabiner->display('both'); // display a group $this->carabiner->display('groupname');
Finally, since Carabiner won't delete old cached files, you'll need to clear them out manually. To do so programatically:
// clear css cache $this->carabiner->empty_cache('css'); //clear js cache $this->carabiner->empty_cache('js'); // clear both $this->carabiner->empty_cache(); // clear both $this->carabiner->empty_cache(); // OR $this->carabiner->empty_cache('both'); // you can also pass a string as the second parameter // that defines a time before which cached files will be removed $this->carabiner->empty_cache('both', 'yesterday');